home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / misc / barfly1_10.lha / Barfly / Docs / Barfly.man < prev    next >
Text File  |  1994-10-12  |  182KB  |  6,310 lines

  1. This file documents Barfly, a development system for AmigaOS V2.04 or
  2. newer.
  3.  
  4.  
  5.  
  6.                               Barfly 1.0
  7.  
  8.        An Intuition controlled Debugger and Optimizing Assembler
  9.  
  10.                   Copyright (c) 1989-94 Ralph Schmidt
  11.  
  12.                              - Shareware -
  13.  
  14. Basic Informations
  15. ******************
  16.  
  17. Copyright and other legal stuff
  18. ===============================
  19.  
  20.    Copyright (c) 1989-94 Ralph Schmidt
  21.  
  22.    Permission is granted to make and distribute verbatim copies of this
  23. manual provided the copyright notice and this permission notice are
  24. preserved on all copies.
  25.  
  26.    No guarantee of any kind is given that the programs described in
  27. this document are 100% reliable. You are using this material at your
  28. own risk. The author *can not* be made responsible for any damage which
  29. is caused by using these programs.
  30.  
  31.    Permission is granted to include this package in Public-Domain
  32. collections, especially in Fred Fishs Amiga Disk Library (including
  33. CD-ROM versions of it).  The distribution file may be uploaded to
  34. Bulletin Board Systems or FTP servers. If you want to distribute this
  35. program you *must* use the original distribution archive `Barfly.lha'.
  36.  
  37.    *None* of the programs may be included or used in commercial programs
  38. unless by written permission from the author.
  39.  
  40.    *None* of the programs may be modified in any way. This especially
  41. includes changing the copyright notices or removing any of the Shareware
  42. restrictions.
  43.  
  44.    *None* of the programs may be used on any machine which is used for
  45. the research, development, construction, testing or production of
  46. weapons or other military applications. This also includes any machine
  47. which is used for training persons for *any* of the above mentioned
  48. purposes.
  49.  
  50.    *None* of the programs may be used by more than the registrated
  51. owner.
  52.  
  53. Registration
  54. ============
  55.  
  56.    As you may have noticed in the copyright I'm working for five years
  57. at Barfly. It has always consumed and will continue to consume a large
  58. amount of my time.
  59.  
  60.    I cannot afford just working for fun. Thus, I decided to release
  61. Barfly as Shareware. I already tried to release Barfly as a commercial
  62. product but the story behind it is more than sad. To sum it...german
  63. Amiga software companys aren't worth any time...`they suck'.  Some
  64. people may think the price is too high for a Shareware product but i
  65. think that BAsm is as powerful as the 2 main available commercial
  66. Assemblers...if not more powerful if you compare the speed and the
  67. optimize functions;there's no commercial Debugger available that can
  68. compete with BDebug.  I've used Barfly myself for commercial Amiga
  69. applications.  Z3-Fastlane device,CDRive,SCSIConfig,...
  70.  
  71.    The unregistered version of Barfly pops up the About requester at
  72. the start and has some functions disabled:
  73.      Assembler:
  74.       o only 8192Bytes large code possible
  75.       o the Section commands aren't available
  76.      Debugger:
  77.       o Only 1 Window per Object
  78.       o Enforcer Catch not available
  79.       o Task Catch not available
  80.       o Crashed Task Catch not available
  81.       o Limited Step count(about 150-200 Steps)
  82.  
  83.    Registered users will be shipped a disk with the newest public
  84. release of Barfly, along with a personalized, so-called "keyfile". It
  85. enables all the missing features and disables the Shareware reminders.
  86. This keyfile will work with all future releases of Barfly, so you can
  87. simply download the latest version from your local bulletin board
  88. without having to wait weeks for your update passing through the slow
  89. mail channels. The keyfile `must not' be distributed in any way.
  90.  
  91. The fee for a Barfly registration is
  92.       70.- DM  (D-Mark),
  93.       70.- SFr (Schweizer Franken),
  94.      230.- FF  (French Francs),
  95.       50.- US$ (US Dollar)
  96.  
  97.    The fastest, cheapest and easiest way to register is put the money
  98. together with the filled registration form into a letter and send it to
  99.  
  100.    Please allow 2-5 weeks delivery for the registrated version.
  101.  
  102.      Ralph Schmidt
  103.      Kleiner Hellweg 4
  104.      33154 Salzkotten
  105.      FR Germany
  106.      Phone: +49-5258-5637
  107.      E-Mail: laire@uni-paderborn.de
  108.         Irc: Laire on #amiga,#amigager
  109.  
  110. Introduction
  111. ************
  112.  
  113. Purpose
  114. =======
  115.  
  116.    BDebug is an Intuition controlled multi-task system Debugger for OS
  117. 2.04 and newer.
  118.  
  119.    You can use BDebug to debugging your programs, catching tasks,
  120. reseach enforcer hits, follow Source-Level Informations and other
  121. advanced functions.  The Debugger supports assemblers,SAS C,Dice and
  122. GCC.
  123.  
  124. Some of BDebug's features are:
  125.  
  126.    * font-sensitive, resizable and Style Guide compliant GadTools GUI
  127.  
  128.    * Object-Oriented that results in a low learning curve
  129.  
  130.    * Supports 68000...68060 and the FPUs
  131.  
  132.    * Can debug multiple tasks at the same time
  133.  
  134.    * Not limited by the amount of window objects.
  135.  
  136.    * highly configurable
  137.  
  138.    * keyboard support
  139.  
  140.    BAsm is a very fast optimizing Assembler for OS 2.04 and newer.
  141.  
  142. Some of BAsm's features are:
  143.  
  144.    * 68000-68060,6888x
  145.  
  146.    * Very Fast
  147.  
  148.    * Include and Incbin Cache
  149.  
  150.    * Strong Optimizer with Multi-Pass Optimizing
  151.  
  152.    * High Level Macros
  153.  
  154.    * ARexx
  155.  
  156.    * Supports OS 2.04 and OS 3.0 Hunks
  157.  
  158.    * SAS D1 Source Level Format
  159.  
  160. System requirements
  161. ===================
  162.  
  163.    Barfly requires Amiga operating system version 2.04 or better.
  164.  
  165.    Kickstart 1.3 is *not* supported; this operating system is considered
  166. obsolete.
  167.  
  168.    Barfly requires at least one megabyte of RAM to run.  A hardisk or a
  169. faster CPU is not required but increase performances and comfort, of
  170. course.
  171.  
  172. Installation
  173. ============
  174.  
  175.    It is really easy to install Barfly:
  176.  
  177.    1. Copy the the binary and the icon (called "BDebug" and
  178. "BDebug.info")   to any directory.
  179.  
  180.    2. Copy the the binary and the icon (called "BAsm" and "BAsm.info")
  181. to any directory.
  182.  
  183.    Then copy the supplied configuration files from "s/Barfly/#?" to "S:"
  184. directory of your system partition or create env:Barflypath with the
  185. path to a directory that contains Barfly/#?.
  186.  
  187. Other topics
  188. ************
  189.  
  190. Updates
  191. =======
  192.  
  193.    Whenever a new release of Barfly gets released, I will post some
  194. information in the appropriate newsgroups of some electronic networks.
  195. The new archive will soon be available on many bulletin boards and on
  196. all `AmiNet' FTP servers. Major releases will also come with some PD
  197. disks, especially on Fred Fish's collection.
  198.  
  199.    As mentioned above, registered users will neither need a new keyfile
  200. nor a special personalized program version. They can use all new
  201. features immediately.
  202.  
  203. Support
  204. =======
  205.  
  206.    If you have some questions, comments, suggestions or even flames,
  207. please feel free to contact me at one of the following addresses. If
  208. you send your letter via e-mail, there's a good chance for getting a
  209. quick reply.
  210.  
  211.      Snailmail: Ralph Schmidt
  212.                 Kleiner Hellweg 4
  213.                 33154 Salzkotten
  214.                 FR Germany
  215.      
  216.          Phone: +49-5258-5637
  217.      
  218.         E-Mail: laire@uni-paderborn.de
  219.            Irc: Laire on #amiga,#amigager
  220.  
  221. History
  222. =======
  223.  
  224.    * 0.0 - 1.0
  225.      not released
  226.  
  227. Future
  228. ======
  229.  
  230. Here are some ideas for future versions of BDebug:
  231.  
  232.    * Full Source Level support for GCC and perhaps SAS.
  233.  
  234.    * Better BDebug Arexx support...the current one is a bad excuse.
  235.  
  236.    * Mungwall Trace methods.
  237.  
  238.    * Automatic Refresh of some Windows(Task Window...)
  239.  
  240.    * Amigaguide file mode in the autodocs functions.
  241.  
  242.    * Highlight changed registers
  243.  
  244.    * Better documentation.
  245.  
  246.    * BAsmOption for the easy BAsm options configuration.
  247.  
  248.    * Other things i'm too lazy to mention now.
  249.  
  250. Important:
  251.      There is absolutely NO guarantee that these features will ever be
  252.      implemented. So don't be disappointed, if they aren't in the next
  253.      version.
  254.  
  255. Acknowledegments
  256. ================
  257.  
  258. Thanks must go to:
  259.  
  260.    - Dirk Leschner, Frank Jakobs
  261.  
  262.      for being my best friends
  263.  
  264.    - Matthias Scheler
  265.  
  266.      for his manual design and Filer.
  267.  
  268.    - S.Schaem, Børge Nøst, Alexis Wilke, Michael B. Smith, Marc Heuler
  269.  
  270.      for their superb betatesting efforts
  271.  
  272.    - Mike Schwartz
  273.  
  274.      for a lot suggestions to improve basm. Sad he has left the Amiga
  275.      community 2 years ago.
  276.  
  277.    - Stefan Becker
  278.  
  279.      for Toolmanager and being a nice guy.
  280.  
  281.    - Christoph Wolf
  282.  
  283.      for DynamiCache and being a nice guy.
  284.  
  285.    - Brian Cerveny(Redwine)
  286.  
  287.      for Grapevine and being a nice guy(Really ?).
  288.  
  289.    - All my IRC friends.
  290.  
  291.      for many great hours. Thanks!
  292.  
  293.      Andrew Denton(Guardian), Kenneth Dyke(Nyx), Bill Coldwell(Cryo),
  294.      Brian Cerveny(Redwine), Joseph Hillenburg(xterm), Scott
  295.      Ellis(ScottE), Chris Wichura(Caw), John Wiederhirn(John\_W), Mike
  296.      Schwartz(mykes), Markus Illenseer(ill), Petra Zeidler(stargazer),
  297.      Michael van Elst(mlelstv), Holger Lubitz(holgi), Ralph
  298.      Babel(rbabel), Seth Harman(Budha) and a lot guys i haven't
  299.      mentioned here.
  300.  
  301.    - Chris Schneider and Urban D. Mueller
  302.  
  303.      for some suggestions 2-3 years ago and installing Aminet.
  304.  
  305.    - Michael "billy" Böhnisch
  306.  
  307.      for his cleanup on MakeBarflyFD 2-3 years ago.
  308.  
  309.    - Steve Wright
  310.  
  311.      for designing the icons 2 years ago.
  312.  
  313. And of course to all the other Beta testers and registered users.
  314.  
  315.    The V40 Includes can be ftp'ed from the FTP-Server.
  316.  
  317.    ftp.rz.uni-wuerzburg.de: pub/amiga/frozenfish/bbs/com
  318.  
  319.    A superb Linker "lk" by Alex Wilke should be soon availble on Aminet.
  320.  
  321.                               BDebug 1.0
  322.  
  323.                    An Intuition controlled Debugger
  324.  
  325.                   Copyright (c) 1989-94 Ralph Schmidt
  326.  
  327.                              - Shareware -
  328.  
  329. Usage of BDebug
  330. ***************
  331.  
  332. The Command Window
  333. ==================
  334.  
  335. Debugger Philosophy
  336. ===================
  337.  
  338.    BDebug is a multitasking Debugger that supports the Motorola
  339. processors 68000...68060 and 68881...68882.  The Debugger allows to
  340. debug unlimited tasks parallel.  Because of the Debugger's complexity
  341. BDebug was designed in an object-oriented way to allow an easy and
  342. comfortable way to use it.  The register window `REGWindow' is the Root
  343. class of the task object that can be expanded by several subclass
  344. windows.  Every subclass window has privat menus and inherits the
  345. public menus of its father object.
  346.  
  347. Debug Methoden
  348. ==============
  349.  
  350.    The Debugger offers a variety of different Debug methods that can be
  351. activated by menu or gadget.
  352.  
  353. Debug Task
  354. ..........
  355.  
  356.    is used to select a task you wanna debug. If you doubleclick on a
  357. task a `REGWindow' and a couple of information windows opens.  Which
  358. type and how many are opened depends on the current configuration.
  359. After the task could be stopped the contents of the `REGWindow' and all
  360. other information windows gets refreshed.  If the task is in the `Wait'
  361. state the task is stopped when it gets a signal.
  362.  
  363.                          Task Listview Layout
  364.  
  365.                                    
  366.   Taskaddress      &     Priority     &     Status     &     [!]Name
  367.  
  368.                                    
  369.        A process is marked by `!' at the beginning of the name.
  370.  
  371.    You should know what task you can stop and what kind of task should
  372. never be stopped. For example the Input.device should never be stopped.
  373.  
  374. Debug File
  375. ..........
  376.  
  377.    is used to load and stop a program.  This function is equal to the
  378. bdebug cli startup with the exception that you can enter the parameter
  379. in a requester.  If no error occur all configurated windows are opened
  380. and the PC stops at the defined programstart breakpoint that normally
  381. points to the first command of the program.
  382.  
  383. Debug Next Task
  384. ...............
  385.  
  386.    is used to debug the next task that is opened.  The Debugger waits
  387. until another task is created by AddTask and a couple of information
  388. windows opens.  Which type and how many are opened depends on the
  389. current configuration.  After the new task was caught the pc points to
  390. the beginning of the task and `Catch Next Task' is disactivated.  To
  391. catch a program that is started from the WV you have to use `Debug Next
  392. Task' to catch the WB Startup Task `WBL' that starts the program.  Now
  393. you have to activate `Debug Next Task' again and let the current task
  394. run.  After a short time the task `WBL' ends and the program's task is
  395. caught.
  396.  
  397.      You should avoid to start a new task between the 2 `Debug Next
  398.      Task' phases because it's easy to catch the wrong one.
  399.  
  400.  
  401.      You should notice that `AddTask' is patched and points to a new
  402.      routine. Thus you should be careful with programs that also patch
  403.      `AddTask'. Furthermore it's useful know in what sequences these
  404.      patches have to be removed.  The Debugger can only be closed when
  405.      all patched system function that were installed after the Debugger
  406.      was started are removed.
  407.  
  408.  
  409.      If you start a program in the shell without `c:Run' no new task is
  410.      created. Instead the program is run as a subroutine in shell's
  411.      task so you can't catch the task that easy.
  412.  
  413.  
  414. Debug Crashed Task
  415. ..................
  416.  
  417.    is used to catch tasks that crash so you track down the bug location
  418. a lot easier. If the system itself doesn't run anymore you shouldn't
  419. expect that bdebug still runs because it depends on a working system.
  420. If a task crashes and the option `Debug Crashed Task' is activated a
  421. couple of information windows opens. Which type and how many are opened
  422. depends on the current configuration.  `Task Held Requester'.
  423.  
  424. Catch Enforcer Hit
  425. ..................
  426.  
  427.    is used to tell the Debugger to stop the task it controlls when an
  428. enforcer hit happens.  Unfortunately the Debugger can't stop the task
  429. at exactly the same location where the hit happened.  Mostly the hit
  430. command is 1-2 instructions above the stopped task's PC.
  431.  
  432.    This function needs Enforcer V37.x by M. Sinz and it must be
  433. installed before BDebug is started. Please read the documentation.
  434.  
  435. Select Display Mode
  436. ...................
  437.  
  438.    This function allows you to chooce the Screen Mode for the Debugger.
  439.  
  440. How to start ?
  441. ==============
  442.  
  443.    If you only want to debug a program you have to start bdebug with
  444. the program's name and parameters or by using `Debug Program' in the
  445. command window.  Another method is to move a program's icon on the
  446. command window or specify BDebug as in the icon as the `DefaultTool'.
  447.  
  448.    `Name:'
  449.  
  450.      BDEBUG - The CLI Startup
  451.  
  452.  
  453.    `Synopnis:'
  454.  
  455.      BDEBUG [?] [<Program> [Argument] ]
  456.  
  457.  
  458.    `Function:'
  459.  
  460.      BDebug activates the Debugger, loads and stops the optional
  461.      entered program. If it can find a local config file with  the
  462.      suffix *.bdebug it loads it.
  463.  
  464.  
  465.    `Inputs'
  466.  
  467.         * ? shows an information message
  468.  
  469.         * program name If no program name is entered BDebug looks for
  470.           env:BDebugProgram and loads the program instead that the env:
  471.           points to.
  472.  
  473.         * argument line of the program. If there are spaces in
  474.           parameters you have to enclose the argument with `""'.
  475.  
  476.  
  477. Usage of BDebug
  478. ***************
  479.  
  480. The Register Window
  481. ===================
  482.  
  483. Register Window
  484. ---------------
  485.  
  486.    The register window is the most important control layer of the
  487. Debugger and every debugged task has one.  You can link unlimited other
  488. information windows to the `REGWindow' or you can tell the Debugger to
  489. give up controlling the task.  In the title line of the window you can
  490. see the ID number of the task, so you can recognize what information
  491. window belongs to this task.  Furthermore the title line also contain
  492. the task address,the state, `RUN',`WAIT' or `STOP' and the name of the
  493. task.  The task is in the `RUN' state if the task has the controll at
  494. the moment instead of the traphandler; the task is in the `STOP' state
  495. when the task waits and the traphandler controlls what happens.  The
  496. task is the `WAIT' state only when the Debugger has to wait to catch a
  497. task by a `Debug Task'.  In the upper area of the window you see the
  498. normal data and address registers where the address register also have
  499. additional information fields.  To change a register or to watch memory
  500. where the register points to you only need to doubleclick on the
  501. register or on the register's memory contents.  Furthermore you may
  502. change other usermode registers by this method.  Supervisor register
  503. can't be changed because that makes not much sense for a system
  504. Debugger.
  505.  
  506.                            `68000 Registers'
  507.  
  508.              D0=xxxxxxxx yyyy A0=xxxxxxxx   Arg1 Arg2 [!]
  509.  
  510.              D1=xxxxxxxx yyyy A1=xxxxxxxx   Arg1 Arg2 [!]
  511.  
  512.              D2=xxxxxxxx yyyy A2=xxxxxxxx   Arg1 Arg2 [!]
  513.  
  514.              D3=xxxxxxxx yyyy A3=xxxxxxxx   Arg1 Arg2 [!]
  515.  
  516.              D4=xxxxxxxx yyyy A4=xxxxxxxx   Arg1 Arg2 [!]
  517.  
  518.              D5=xxxxxxxx yyyy A5=xxxxxxxx   Arg1 Arg2 [!]
  519.  
  520.              D6=xxxxxxxx yyyy A6=xxxxxxxx   Arg1 Arg2 [!]
  521.  
  522.              D7=xxxxxxxx yyyy A7=xxxxxxxx   Arg1 Arg2 [!]
  523.  
  524.            USP=xxxxxxxx  SSP=xxxxxxxx  PC=xxxxxxxx  SR=xxxx
  525.  
  526.    * [!] shows if the address register points on an odd address.
  527.  
  528.    * if the address register points on an illegal memory area the char
  529.      `*' is shown in Arg1 and Arg2 to avoid crashes by reading non
  530.      readable io-addresses.  You can config the readable memory areas.
  531.  
  532.    * if the address register points on the following system structures
  533.      the name of the Node is shown in Arg1 and the Name of the
  534.      structure in Arg2.
  535.  
  536.         * Library
  537.  
  538.         * Device
  539.  
  540.         * Port
  541.  
  542.         * Task
  543.  
  544.         * Resource
  545.  
  546.         * MemHead
  547.  
  548.    * if the address register points to the custom chip area the name of
  549.      the register is shown in Arg1 and the ID-Word CUSTOM is shown in
  550.      Arg2.  Custom register map is $dff000-$dff200.
  551.  
  552.    * if the address register points to a symbol the symbol and the
  553.      contents is shown.
  554.  
  555.    * Otherwise 8Bytes of the memory are shown where the register points
  556.      to.  The 8 Bytes are shown hexadecimal in Arg1 and ascii in Arg2.
  557.  
  558.                            `68010 Registers'
  559.  
  560.                VBR=xxxxxxxx  SFC=xxxxxxxx  DFC=xxxxxxxx
  561.  
  562.                            `68020 Registers'
  563.  
  564.                VBR=xxxxxxxx  SFC=xxxxxxxx  DFC=xxxxxxxx
  565.  
  566.         MSP=xxxxxxxx  ISP=xxxxxxxx CACR=xxxxxxxx CAAR=xxxxxxxx
  567.  
  568.                            `68030 Registers'
  569.  
  570.                VBR=xxxxxxxx  SFC=xxxxxxxx  DFC=xxxxxxxx
  571.  
  572.         MSP=xxxxxxxx  ISP=xxxxxxxx CACR=xxxxxxxx CAAR=xxxxxxxx
  573.  
  574.                CRP=xxxxxxxxxxxxxxxx SRP=xxxxxxxxxxxxxxxx
  575.  
  576.            TT0=xxxxxxxx  TT1=xxxxxxxx   TC=xxxx PSR=xxxxxxxx
  577.  
  578.                            `68040 Registers'
  579.  
  580.                VBR=xxxxxxxx  SFC=xxxxxxxx  DFC=xxxxxxxx
  581.  
  582.                MSP=xxxxxxxx  ISP=xxxxxxxx CACR=xxxxxxxx
  583.  
  584.           URP=xxxxxxxx  SRP=xxxxxxxx   TC=xxxx  PSR=xxxxxxxx
  585.  
  586.         ITT0=xxxxxxxx ITT1=xxxxxxxx DTT0=xxxxxxxx DTT1=xxxxxxxx
  587.  
  588.                            `68060 Registers'
  589.  
  590.                VBR=xxxxxxxx  SFC=xxxxxxxx  DFC=xxxxxxxx
  591.  
  592.               CACR=xxxxxxxx  PCR=xxxxxxxx BUSCR=xxxxxxxx
  593.  
  594.           URP=xxxxxxxx  SRP=xxxxxxxx   TC=xxxx  PSR=xxxxxxxx
  595.  
  596.         ITT0=xxxxxxxx ITT1=xxxxxxxx DTT0=xxxxxxxx DTT1=xxxxxxxx
  597.  
  598.                            Type  Information
  599.  
  600.               xxxxxxxx  [Symbol] Mnemonic operand1[,...]]
  601.  
  602.             (EA): [Address1=Contents]...[Address2=Contents]
  603.  
  604.      In the `(EA)' line you can see the addresses and their contents
  605.      the current command accesses.  The contents of illegal addresses
  606.      aren't shown.
  607.  
  608. Local Menus
  609. -----------
  610.  
  611.    * Close Window
  612.  
  613.      closes the `REGWindow', all connected windows and disactivates the
  614.      Debugger for this task.  To disactivate the Debugger you have to
  615.      choose if the task should keep running so it's the task's business
  616.      to stop.  Furthermore you can end the task by runing the cleanup
  617.      routine of the task or just removing the task from the list but
  618.      this can cause sideeffects you can't always oversee.  If the task
  619.      is a process then the Remove option is equal to the Cleanup option.
  620.      If it's only a task the Cleanup option is equal to the Cleanup
  621.      option.  Beware that the Remove option doesn't free any resources
  622.      of the task.
  623.  
  624.           You should really know what you're doing if you for example
  625.           remove a task from the system.
  626.  
  627.  
  628.    * ZOOM Windows
  629.  
  630.      expands all windows of the task.
  631.  
  632.    * Log File
  633.  
  634.      activates or disactivates the loging of the register and PC
  635.      changes.
  636.  
  637.    * Big View
  638.  
  639.      shrinks the `REGWindow' to a 68000 register layout or expands it
  640.      back to the full layout.
  641.  
  642.    * Open DissWindow
  643.  
  644.      opens a DissWindow with the configured dimensions.
  645.  
  646.    * Open MemWindow
  647.  
  648.      opens a MemWindow with the configured dimensions.
  649.  
  650.    * Open FPUWindow
  651.  
  652.      opens a FPUWindow with the configured dimensions.  The menu is
  653.      only available if a FPU is installed.
  654.  
  655.    * Open BreakWindow
  656.  
  657.      opens a BreakpointWindow with the configured dimensions.
  658.  
  659.    * Open CoppWindow
  660.  
  661.      opens a CoppWindow with the configured dimensions.
  662.  
  663.    * Open StructWindow
  664.  
  665.      opens a StructWindow with the configured dimensions.
  666.  
  667.    * Open SnoopWindow
  668.  
  669.      opens a SnoopWindow with the configured dimensions.
  670.  
  671.    * Open WatchWindow
  672.  
  673.      opens a WatchpointWindow with the configured dimensions.
  674.  
  675.    * Open ChecksumWindow
  676.  
  677.      opens a ChecksumWindow with the configured dimensions.
  678.  
  679.    * Save Window Settings
  680.  
  681.      saves the positions and count of all window the current task
  682.      controlls.  The saved file then contains the appropriate commands
  683.      you have to enter yourself into the configuration file.  Because
  684.      of the Debugger's window concept it makes no sense to save a full
  685.      configurations file.
  686.  
  687. Public Menus
  688. ------------
  689.  
  690.    * Step 1
  691.  
  692.      runs the current command and stops the task afterwords.
  693.  
  694.    * Step X
  695.  
  696.      runs X commands and stops the task afterwards.
  697.  
  698.    * Step Debug Line
  699.  
  700.      runs commands until the PC meets another source line.  If the PC
  701.      is outside the program or if no debug informations are available a
  702.      single step i used.  The command enters rubroutines.
  703.  
  704.    * Trace Debug Line
  705.  
  706.      is simular to `Step Debug Line' with the exception that it runs
  707.      subroutines.
  708.  
  709.    * Trace over Calls
  710.  
  711.      runs the current command or subroutine and stops the task
  712.      afterwards.  Depending on the configuration and the memory area a
  713.      breakpoint or single steps are used.  If a crashes happen in
  714.      certain program parts you should remove the command `Tracebreak'
  715.      from the configuration.
  716.  
  717.           You should avoid to use `Tracebreak' in Libraries and Devices
  718.           that are located in the ram.  If another task accesses the
  719.           routine at the same time you can expect an illegal exception.
  720.  
  721.  
  722.           Some Amiga MMU Setups don't like that programs write to the
  723.           kickstart rom. For example breakpoints.
  724.  
  725.  
  726.    * Trace X over Calls
  727.  
  728.      runs X commands or subroutines and stops the task afterwards.
  729.      Depending on the configuration and the memory area a breakpoint or
  730.      single steps are used.
  731.  
  732.    * Trace Work
  733.  
  734.      is simular to the command `Trace over Calls' with the exception
  735.      that all commands are run.  This function is useful to trace loops.
  736.  
  737.  
  738.           Example:
  739.                      moveq        #10,d0
  740.                  0$:
  741.                      dbra         d0,0$
  742.  
  743.           If you use the function on the command `dbra' the Debugger
  744.           sets a breakpoint after the dbra and runs the task. It drops
  745.           back to single step when it hits a `Jmp', `bra', `rts'....
  746.  
  747.  
  748.    * Trace over OS-Calls
  749.  
  750.      runs the current command or the OS function and stops the task
  751.      afterwards.
  752.  
  753.    * Trace on Flow
  754.  
  755.      stops the task when a PC direction occurs.  This means the PC is
  756.      stopped when it hits a `Jsr', `Jmp', `bcc', `rts'....
  757.  
  758.    * Trace on Adress
  759.  
  760.      runs the task until the PC is equal to the entered address.  This
  761.      function is not very fast because the task is running in single
  762.      step mode and after each instruction the PC is compared with the
  763.      Adress.
  764.  
  765.    * Trace out of OS
  766.  
  767.      runs the task until the PC is outside of the kickstart.  This
  768.      functions is useful when you catch a task inside the OS and you
  769.      wanna get as fast as possible back to the program's code.  It
  770.      works simular as `Trace on Adress'.
  771.  
  772.           You shouldn't use this command if your task only runs in the
  773.           kickstart.
  774.  
  775.  
  776.    * (PC)++
  777.  
  778.      jumps over the current command.  Useful to jump over `Illegal'
  779.      breakpoints that you can use for debugging purposes in your
  780.      program.
  781.  
  782.    * PC-2
  783.  
  784.      subtract 2 Bytes from the PC.
  785.  
  786.    * Write Nop
  787.  
  788.      overwrites the current command with a `Nop'.
  789.  
  790.    * Write Illegal
  791.  
  792.      overwrites the current command with an `Illegal'.
  793.  
  794.    * Run Task
  795.  
  796.      runs the task and only stops on exceptions.
  797.  
  798.    * Run Watched Task
  799.  
  800.      runs the task in trace mode and stops when a WatchPoint condition
  801.      is true.  If there are no watchpoints the command behaves like
  802.      `Run Task'.
  803.  
  804.    * Run History Task
  805.  
  806.      runs the task in trace mode and saves the registers each step into
  807.      the history stack.
  808.  
  809.    * Stop Task
  810.  
  811.      stops the task.
  812.  
  813.    * Send Signal
  814.  
  815.      sends a signal to the task.  Default Signal is CTRL-C = 12
  816.  
  817.    * Undo Level
  818.  
  819.      sets the undobuffer's depth.
  820.  
  821.    * Undo
  822.  
  823.      undos the last changes in the registerframe.
  824.  
  825.    * View Refresh
  826.  
  827.      activates and disactivates the copperlist refresh after each trace
  828.      operation. This function is helpful if you debug programs that
  829.      install own copperlists.
  830.  
  831.    * Show (EA)
  832.  
  833.      activates and disactivates the output of the address and address
  834.      contents that are access by the current assembler command.
  835.  
  836.    * Symbol
  837.  
  838.      activates and disactivates the use of symbols in the `REGWindow'.
  839.  
  840.    * Delete Symbols
  841.  
  842.      erases all symbols of the task.
  843.  
  844.    * Copy Symbols
  845.  
  846.      can copy a symbol list of the task to a different task.  This
  847.      function is helpful if you a task is started from another task and
  848.      you wanna keep the symbol list.
  849.  
  850.    * Load Symbols
  851.  
  852.      loads the symbols of a program where you can select an alternative
  853.      process's segmentlist for calculating the symbol and debug
  854.      informations.  Normally you choose the same process but sometimes
  855.      it's helpful to select a different process.  For example if the
  856.      task you debug is created in a program you have to choose the
  857.      program's task to get the correct symbol addresses.
  858.  
  859.    * Set Hunklist
  860.  
  861.      sets a new segment list for the SourceWindow and some other hunk
  862.      related functions.  Because the position in the SourceWindow
  863.      depends on the segments it's sometimes helpful if you load new
  864.      symbols and debug informations for this task.  If you load an
  865.      alternative Hunklist by selecting a custom task when you use `Load
  866.      Symbols' this routine is called automaticly.
  867.  
  868.    * Reset Hunklist
  869.  
  870.      removes the alternative hunklist.
  871.  
  872.    * Show Value
  873.  
  874.      shows the value of an argument.
  875.  
  876.    * Show Last Exception
  877.  
  878.      shows the last exception.
  879.  
  880.    * Open Task Window
  881.  
  882.      opens a window to show the task structure of the task.
  883.  
  884.    * Open System Window
  885.  
  886.      opens a window to show the ExecBase structure.
  887.  
  888.    * Open Proces Window
  889.  
  890.      opens a window to show the process structure of the process.
  891.  
  892.    * Open CLI Window
  893.  
  894.      opens a window to show the cli structure of the process.
  895.  
  896.    * Open Hunk Window
  897.  
  898.      opens a window to show the hunks of the process.
  899.  
  900.    * Open Symbol Window
  901.  
  902.      opens a window to show the symbols of the process.  If you
  903.      doubleclick on a symbol you get the hunk where the symbol is
  904.      located.
  905.  
  906.    * Open Library Window
  907.  
  908.      opens a window to show the libraries.  If you doubleclick on a
  909.      library entry it opens a `FD:' window that shows all functions of
  910.      the library when the library is defined in the `Barfly.FD' file.
  911.      Furthermore if you doublelick on a function you have the choice to
  912.      see the function in a `DissWindow' or the autodocs documentation.
  913.  
  914.    * Open Device Window
  915.  
  916.      opens a window to show the devices.
  917.  
  918.    * Open Resource Window
  919.  
  920.      opens a window to show the resources.
  921.  
  922.    * Open Port Window
  923.  
  924.      opens a window to show the public ports.
  925.  
  926.    * Open Resident Window
  927.  
  928.      opens a window to show the resident modules.
  929.  
  930.    * Open Interrupt Window
  931.  
  932.      opens a window to show the interrupts.
  933.  
  934.    * Open AutoDocs Window
  935.  
  936.      opens a filerequester to choose the needed autodocs information of
  937.      a library.  Now a window is opened that shows all function of the
  938.      chosen autodoc file.  If you now click on a function another
  939.      window is opened that shows the function documentation.
  940.  
  941.    * Open History Window
  942.  
  943.      opens a HistoryWindow that shows the last saved registerframes of
  944.      the undobuffer. The undobuffer is organized as a stack that the
  945.      first entry is the last entry in the HistoryWindow.  The
  946.      HistoryWindow isn't updated automatic.
  947.  
  948.    * Stack Check
  949.  
  950.      controlls the stack check. If the register A7 points out of the
  951.      stack bounds or points on an odd address a warning is shown.  The
  952.      Debugger only checks the task when the task give back the control
  953.      to the traproutine, so it's not possible to notice every stack
  954.      problem.
  955.  
  956.           You should be aware that this function doesn't work with a
  957.           WShell task because the `WShell' doesn't set the correct
  958.           stack task values.
  959.  
  960.  
  961.    * Find Task of Adress
  962.  
  963.      trys to find the task that belongs to the entered address.  The
  964.      command checks if the address is in the task,process,cli, mementry
  965.      structure and the hunks.  It's not safe to assume that the
  966.      function can check all cases.
  967.  
  968.    * Load Binary
  969.  
  970.      loads a file with an optional length into a memory area.  If the
  971.      Debugger should allocate the memory block automaticly you have to
  972.      close the memory requester.
  973.  
  974.    * Save Binary
  975.  
  976.      saves a memory area into a file.
  977.  
  978.    * Freeze Task
  979.  
  980.      freezes a selectable task.  When bdebug ends the frozen tasks are
  981.      warmed up again.
  982.  
  983.    * Warm up Task
  984.  
  985.      warms up a frozen task.
  986.  
  987.    * Kill Task
  988.  
  989.      kills a selectable task.
  990.  
  991.           You should know what task you can kill.
  992.  
  993.  
  994.    * Show Task
  995.  
  996.      shows the task structure of a selectable task.
  997.  
  998.    * Show Prozess
  999.  
  1000.      shows the process structure of a selectable process.
  1001.  
  1002.    * Show CLI
  1003.  
  1004.      shows the cli structure of a selectable process.
  1005.  
  1006.    * Show Hunk
  1007.  
  1008.      shows the hunks of a selectable process.
  1009.  
  1010.    * Send Task Signal
  1011.  
  1012.      sends a signal to a selectable task.
  1013.  
  1014.    * Set Task Priority
  1015.  
  1016.      sets a priority of a selectable task.
  1017.  
  1018.    * Refresh Code Cache
  1019.  
  1020.      refreshes the Code Cache.
  1021.  
  1022.    * Refresh Data Cache
  1023.  
  1024.      refreshes the Data Cache
  1025.  
  1026. Usage of BDebug
  1027. ***************
  1028.  
  1029. The FPU Window
  1030. ==============
  1031.  
  1032. FPU Window
  1033. ----------
  1034.  
  1035.    The FPU Window shows the FPU register FP0 to FP7 in the 96Bit
  1036. Extended format and the registers FPCR,FPSR and FPIAR in hexadecimal.
  1037. You can only open this window if a FPU is available.
  1038.  
  1039.      Register Window Layout
  1040.  
  1041.                            FP0=FloatingPoint
  1042.  
  1043.                            FP1=FloatingPoint
  1044.  
  1045.                            FP2=FloatingPoint
  1046.  
  1047.                            FP3=FloatingPoint
  1048.  
  1049.                            FP4=FloatingPoint
  1050.  
  1051.                            FP5=FloatingPoint
  1052.  
  1053.                            FP6=FloatingPoint
  1054.  
  1055.                            FP7=FloatingPoint
  1056.  
  1057.                       FPCR=xxxxxxxx FPSR=xxxxxxxx
  1058.  
  1059.                             FPIAR=xxxxxxxx
  1060.  
  1061. Local Menus
  1062. -----------
  1063.  
  1064.    * Close Window
  1065.  
  1066.      closes the window.
  1067.  
  1068. Usage of BDebug
  1069. ***************
  1070.  
  1071. The Disassembler Window
  1072. =======================
  1073.  
  1074. Disassembler window
  1075. -------------------
  1076.  
  1077.    The `DissWindow' shows the memory contents in assembler mnemonics.
  1078. The address of the window's view can be absolut or relative.  In the
  1079. absolut mode the window is set to a fixed adress and you can read in
  1080. the title `No Link'.  In the relative mode the window is connected with
  1081. a register so the window's view depends on the registers value.  You
  1082. can see this mode by the title string `Link to *' where * represents
  1083. the register name.  The PC is shown by the colour pen 2.  If the linked
  1084. register value is outside of the window's view area the whole contents
  1085. of the window will be refreshed.  You can change size of the window and
  1086. scroll through the memory area by using the cursors.  In the title you
  1087. see an ID-String with the format `\#x.y' where `X' represents the
  1088. `REGWindow' number and `y' the number of the `MemWindow'.  By a
  1089. doubleclick in a line of the window you can sets or remove a
  1090. breakpoint. You can disable this function in the configuration.
  1091.  
  1092. Local Menus
  1093. -----------
  1094.  
  1095.    * Close Window
  1096.  
  1097.      closes the window.
  1098.  
  1099.    * Shrink Window
  1100.  
  1101.      shrinks the window.
  1102.  
  1103.    * Expand Window
  1104.  
  1105.      expands the window to screen size.
  1106.  
  1107.    * Link to Register
  1108.  
  1109.      links the window with a register.  If you enter the string `NO' it
  1110.      switches to the absolute mode.
  1111.  
  1112.    * Change Adress
  1113.  
  1114.      changes the view address of the window.
  1115.  
  1116.    * Clear Adress
  1117.  
  1118.      resets the view address of the window.
  1119.  
  1120.    * Refresh Window
  1121.  
  1122.      refreshes the window.
  1123.  
  1124.    * .W Branches
  1125.  
  1126.      activates and disactivates the output of the old branch width size.
  1127.  
  1128.    * Neg. Offsets
  1129.  
  1130.      activates and disactivates the output of negative values in the
  1131.      indirect address modes with offset.
  1132.  
  1133.    * Neg. Data
  1134.  
  1135.      activates and disactivates the output of negative values in the
  1136.      direkt address mode.
  1137.  
  1138.    * Opcode Data
  1139.  
  1140.      activates and disactivates the additional output of the command
  1141.      bytes.
  1142.  
  1143.    * Auto Refresh
  1144.  
  1145.      activates and disactivates the global refresh of the window after
  1146.      each step.
  1147.  
  1148.    * Symbols
  1149.  
  1150.      activates and disactivates the symbol output in the window.
  1151.  
  1152.    * Show Lib Call
  1153.  
  1154.      activates and disactivates the symbolic output of library
  1155.      functions so all library functions that are defined in the
  1156.      configuration file `<BarflyPath>/Barfly/BARFLY.FD' are recognized.
  1157.  
  1158.    * Guess Lib Call
  1159.  
  1160.      activates and disactivates the guessing of function call names.
  1161.      It only works in connection with the option `Show Lib Call'.
  1162.      Fortunately you can't expect that the function names always fit
  1163.      because the the library base register A6 can change until the
  1164.      program counter meets the function.
  1165.  
  1166.    * Mark Block End
  1167.  
  1168.      activates and disactivates marking after the instruction
  1169.      `JMP',`BRA',`RTS',`RTE',`RTD' and `RTR' to make program blocks
  1170.      more visible.
  1171.  
  1172.    * Set/Clear Breakpoint
  1173.  
  1174.      sets/removes a breakpoint on the first entry in the window.
  1175.      Breakpoints are shown by changing the pen from colour 1 to colour
  1176.      3 and the char `>' at the beginning of a line.
  1177.  
  1178.    * Pick/Clear Breakpoint
  1179.  
  1180.      sets/removes a breakpoint through a symbol list.
  1181.  
  1182.    * Disassemble to File
  1183.  
  1184.      disassembles a memory area into a file.
  1185.  
  1186. Usage of BDebug
  1187. ***************
  1188.  
  1189. The Memory Window
  1190. =================
  1191.  
  1192. Memory window
  1193. -------------
  1194.  
  1195.    The `MemWindow' shows the memory contents hexadecimal and in
  1196. ascii.You can change size of the window and scroll through the memory
  1197. area by using the cursors.  In the title you see an ID-String with the
  1198. format `\#x.y' where `X' represents the `REGWindow' number and `y' the
  1199. number of the `MemWindow'.
  1200.  
  1201. Local Menus
  1202. -----------
  1203.  
  1204.    * Close Window
  1205.  
  1206.      closes the window.
  1207.  
  1208.    * Shrink Window
  1209.  
  1210.      shrinks the window.
  1211.  
  1212.    * Expand Window
  1213.  
  1214.      expands the window to screen size.
  1215.  
  1216.    * Link to Register
  1217.  
  1218.      links the window with a register.  If you enter the string `NO' it
  1219.      switches to the absolute mode.
  1220.  
  1221.    * Change Adress
  1222.  
  1223.      changes the view address of the window.
  1224.  
  1225.    * Clear Adress
  1226.  
  1227.      resets the view address of the window.
  1228.  
  1229.    * Refresh Window
  1230.  
  1231.      refreshes the window.
  1232.  
  1233.    * Memory Offset Step
  1234.  
  1235.      defines the data format in the window.  The following options can
  1236.      be selected: `None', `Byte', `Word' and `Long'.
  1237.  
  1238.    * Edit
  1239.  
  1240.      activates the edit mode of the `MemWindow'.  In the edit mode you
  1241.      can switch between hex and ascii input by the key `RETURN'. With
  1242.      `ESC' you can leave the edit mode. Only the cursor right and left
  1243.      are changed to the normal.  With these both keys you can access
  1244.      each Byte.  In the edit mode you can't change the size of the
  1245.      window.
  1246.  
  1247.    * Copy
  1248.  
  1249.      copies a memory area into another memory area.  The function uses
  1250.      `CopyMem' so it doesn't handle memory areas that overlap.
  1251.  
  1252.    * Fill
  1253.  
  1254.      fills a memory area with a value of a certain data-width.
  1255.  
  1256.    * Compare
  1257.  
  1258.      compares a memory area with another memory area.
  1259.  
  1260.    * Search
  1261.  
  1262.      searches a value of a certain data-width in a memory area.  If the
  1263.      value is found the address and the value are shown and you can
  1264.      goon with `Search Next' to find the next address.
  1265.  
  1266.    * Search Next
  1267.  
  1268.      Searches the next value. Look at `Search'
  1269.  
  1270.    * Pred
  1271.  
  1272.      sets the address of the window on the preceding entry of the list.
  1273.      If the node points on an odd, illegal or address NULL the command
  1274.      has no effect.  The next node is equal to `LN_PRED', the second
  1275.      longword of the memory view.
  1276.  
  1277.    * Succ
  1278.  
  1279.      sets the address of the window on the next entry of the list.  If
  1280.      the node points on an odd, illegal or address NULL the command has
  1281.      no effect.  The next node is equal to `LN_SUCC', the first longword
  1282.      of the memory view.
  1283.  
  1284. Usage of BDebug
  1285. ***************
  1286.  
  1287. The Copper Window
  1288. =================
  1289.  
  1290. CopperWindow
  1291. ------------
  1292.  
  1293.    The `CopperWindow' shows the memory contents as copper commands.
  1294. You can change size of the window and scroll through the memory area by
  1295. using the cursors.  In the title you see an ID-String with the format
  1296. `\#x.y' where `X' represents the `REGWindow' number and `y' the number
  1297. of the `CoppWindow'.
  1298.  
  1299. Local Menus
  1300. -----------
  1301.  
  1302.    * Close Window
  1303.  
  1304.      closes the window.
  1305.  
  1306.    * Shrink Window
  1307.  
  1308.      shrinks the window.
  1309.  
  1310.    * Expand Window
  1311.  
  1312.      expands the window to screen size.
  1313.  
  1314.    * Link to Register
  1315.  
  1316.      links the window with a register.  If you enter the string `NO' it
  1317.      switches to the absolute mode.
  1318.  
  1319.    * Change Adress
  1320.  
  1321.      changes the view address of the window.
  1322.  
  1323.    * Clear Adress
  1324.  
  1325.      resets the view address of the window.
  1326.  
  1327.    * Refresh Window
  1328.  
  1329.      refreshes the window.
  1330.  
  1331.    * Goto Into List
  1332.  
  1333.      sets the window list on the standard copperlist
  1334.      `GfxBase->gb_copinit'.
  1335.  
  1336. Usage of BDebug
  1337. ***************
  1338.  
  1339. The Structure Window
  1340. ====================
  1341.  
  1342. StructWindow
  1343. ------------
  1344.  
  1345.    opens window that can be connected with a structure.  You can use
  1346. new structure entries by expanding the the
  1347. `<BarflyPath>/Barfly/Barfly.Include' file or loading a new custom file.
  1348. By a doubleclick on a structure window entry you can cause several
  1349. actions depending on the datatype.  Every datatype is connected with an
  1350. action that is normally started automaticly.  With the configuration
  1351. command `NoAutoStructAction' you can change this behaviour so that an
  1352. action type requester is opened.
  1353.  
  1354.    The following datatypes are available.
  1355.  
  1356.    * APTR opens a MemWindow.
  1357.  
  1358.    * CSTR shows a string.
  1359.  
  1360.    * BPTR opens a MemWindow at the address BPTR*4.
  1361.  
  1362.    * BSTR shows a string at the address (BPTR*4)+1
  1363.  
  1364.    * CPTR opens a DissWindow.
  1365.  
  1366.    * FPTR opens a DissWindow.
  1367.  
  1368.    * BYTE doesn't cause an action.
  1369.  
  1370.    * WORD doesn't cause an action.
  1371.  
  1372.    * LONG doesn't cause an action.
  1373.  
  1374.    * FLOAT doesn't cause an action.
  1375.  
  1376.    * DOUBLE doesn't cause an action.
  1377.  
  1378.    * EXTENDED doesn't cause an action.
  1379.  
  1380.    * RPTR doesn't cause an action.
  1381.  
  1382.    The following action types are available.
  1383.  
  1384.    * MemWindow opens a MemWindow.
  1385.  
  1386.    * DissWindow opens a DissWindow.
  1387.  
  1388.    * CoppWindow opens a CoppWindow.
  1389.  
  1390.    * StructWindow opens a StructWindow.
  1391.  
  1392.    * NewStruct sets a new structure.
  1393.  
  1394. Structure Macro Fileformat
  1395. --------------------------
  1396.  
  1397.    In the beginning you define the root directory entries with the
  1398. Macro `Menudir'.  The first parameter is the name of the entry,then the
  1399. address of the parent directory and then the address of the
  1400. subdirectory.  In the root directory the parent address is fortunately
  1401. NULL.  The last entry of the directory is defined by the Macro
  1402. `MENUDIREND'.
  1403.  
  1404.      `Label                   ListViewMacro           Link'
  1405.      RootDir:
  1406.                              .
  1407.                              .
  1408.                              MENUDIR                 exec,0,Exec_Dir
  1409.                              .
  1410.                              .
  1411.      MYCUSTOMENTRY:
  1412.                              MENUDIREND              CUSTOM,0,0
  1413.  
  1414.    The design of a subdirectory only differs from the root directory
  1415. entries by a parent directory address.
  1416.  
  1417.      `Label                   ListViewMacro           Link'
  1418.      Exec_Dir:
  1419.                              .
  1420.                              .
  1421.                              MENUDIR                 nodes.i,RootDir,Nodes_Dir
  1422.                              .
  1423.                              .
  1424.                              MENUDIREND              tasks.i,RootDir,Tasks_Dir
  1425.  
  1426.    to define the structure directory entries you have to use `MENUITEM'
  1427. and `MENUITEMEND'.  The first parameter in the Item Macros is the name
  1428. of the entry and also the name of the structure.  The second parameter
  1429. defines the address of the parent directory.
  1430.  
  1431.      `Label                   ListViewMacro           Link'
  1432.                              .
  1433.                              .
  1434.      Nodes_Dir:
  1435.                              MENUITEM                LN,Exec_Dir
  1436.                              .
  1437.                              .
  1438.                              MENUITEMEND
  1439.  
  1440.    To define a structure you can use the normal assembler syntax that
  1441. you probably have to adjust to your custom needs. For example you can
  1442. tell BDebug more informations about the datatype an entry represents.
  1443. By redefining `APTR' to a `CSTR' you can tell Debugger that the entry
  1444. is a stringpointer.  Or you can tell that `APTR' points to a structure
  1445. by `APTR LN_SUCC,Node'.
  1446.  
  1447.      `Label                   IncludeTypeMacro        Name,Link'
  1448.      LN_Struct:
  1449.                              STRUCTUREB              LN,0
  1450.                              APTR                    LN_SUCC,LN
  1451.                              APTR                    LN_PRED,LN
  1452.                              UBYTE                   LN_TYPE
  1453.                              BYTE                    LN_PRI
  1454.                              CCSTR                   LN_NAME
  1455.                              LABEL                   LN_SIZE
  1456.  
  1457. Local Menus
  1458. -----------
  1459.  
  1460.    * Close Window
  1461.  
  1462.      closes the window.
  1463.  
  1464.    * Shrink Window
  1465.  
  1466.      shrinks the window.
  1467.  
  1468.    * Expand Window
  1469.  
  1470.      expands the window to screen size.
  1471.  
  1472.    * Link to Register
  1473.  
  1474.      links the window with a register.  If you enter the string `NO' it
  1475.      switches to the absolute mode.
  1476.  
  1477.    * Change Adress
  1478.  
  1479.      changes the view address of the window.
  1480.  
  1481.    * Clear Adress
  1482.  
  1483.      resets the view address of the window.
  1484.  
  1485.    * Refresh Window
  1486.  
  1487.      refreshes the window.
  1488.  
  1489.    * Load Custom Struct
  1490.  
  1491.      loads additional structure files. The new structure entries are
  1492.      place in the `CUSTOM' directory.  The format of custom structure
  1493.      files is equal to the file `BARFLY.INCLUDE'.
  1494.  
  1495.    * Select Structure
  1496.  
  1497.      opens the structure include directory requester where you can
  1498.      select the needed structure.  The parent gadget is placed in the
  1499.      upper border.
  1500.  
  1501.    * Goto Sysbase...
  1502.  
  1503.      sets the window adress on the ExecBase.
  1504.  
  1505.    * Goto Gfxbase...
  1506.  
  1507.      sets the window address on the GFXBase.
  1508.  
  1509.    * Save Window....
  1510.  
  1511.      saves the contents of the window in a file.
  1512.  
  1513.    * Full Address
  1514.  
  1515.      this switch decides if the `StructWindow' also shows the address
  1516.      of the entries.
  1517.  
  1518.    * Offset Address
  1519.  
  1520.      this switch decides if the `StructWindow' also shows the offset of
  1521.      the entries.
  1522.  
  1523.    * Pred
  1524.  
  1525.      sets the address of the window on the preceding entry of the list.
  1526.      If the node points on an odd, illegal or address NULL the command
  1527.      has no effect.  The next node is equal to `LN_PRED', the second
  1528.      longword of the memory view.
  1529.  
  1530.    * Succ
  1531.  
  1532.      sets the address of the window on the next entry of the list.  If
  1533.      the node points on an odd, illegal or address NULL the command has
  1534.      no effect.  The next node is equal to `LN_SUCC', the first longword
  1535.      of the memory view.
  1536.  
  1537. Usage of BDebug
  1538. ***************
  1539.  
  1540. The Structure Window
  1541. ====================
  1542.  
  1543. Source window
  1544. -------------
  1545.  
  1546.    The `SourceWindow' shows the source line that belongs to the window
  1547. address. If the program file doesn't have the needed debug informations
  1548. the `Source window' can't be opened. If the address points to an area
  1549. with no relevant debug information, for example the Kickstart or beyond
  1550. the program hunks, you only see a small message.
  1551.  
  1552. Local Menus
  1553. -----------
  1554.  
  1555.    * Close Window
  1556.  
  1557.      closes the window.
  1558.  
  1559.    * Shrink Window
  1560.  
  1561.      shrinks the window.
  1562.  
  1563.    * Expand Window
  1564.  
  1565.      expands the window to screen size.
  1566.  
  1567.    * Link to Register
  1568.  
  1569.      links the window with a register.  If you enter the string `NO' it
  1570.      switches to the absolute mode.
  1571.  
  1572.    * Change Adress
  1573.  
  1574.      changes the view address of the window.
  1575.  
  1576.    * Clear Adress
  1577.  
  1578.      resets the view address of the window.
  1579.  
  1580.    * Refresh Window
  1581.  
  1582.      refreshes the window.
  1583.  
  1584.    * Set Breakpoint
  1585.  
  1586.      sets a breakpoint on the active line.
  1587.  
  1588.    * Show HunkInfo
  1589.  
  1590.      shows the hunk of the current source line.
  1591.  
  1592. Usage of BDebug
  1593. ***************
  1594.  
  1595. The Snoop Window
  1596. ================
  1597.  
  1598. Snoop Window
  1599. ------------
  1600.  
  1601.    The `SnoopWindow' snoops the task's allocations.
  1602.  
  1603. Local Menus
  1604. -----------
  1605.  
  1606.    * Close Window
  1607.  
  1608.      closes the window.
  1609.  
  1610.    * Shrink Window
  1611.  
  1612.      shrinks the window.
  1613.  
  1614.    * Expand Window
  1615.  
  1616.      expands the window to screen size.
  1617.  
  1618.    * Refresh Window
  1619.  
  1620.      refreshes the window.
  1621.  
  1622.    * Auto Refresh
  1623.  
  1624.      activates/disactivates display refresh by an allocation.
  1625.  
  1626.    * Snoop Memory
  1627.  
  1628.      activates/disactivates snooping.
  1629.  
  1630.    * Snoop Mask
  1631.  
  1632.      sets the allocation filter mask.  Is the Mask 20 only allocations
  1633.      with the size 20 are recorded. Default -1.
  1634.  
  1635.    * Snoop Max Entries
  1636.  
  1637.      sets the maximal recorded snoop entries.
  1638.  
  1639. Usage of BDebug
  1640. ***************
  1641.  
  1642. The Breakpoint Window
  1643. =====================
  1644.  
  1645. Breakpoint window
  1646. -----------------
  1647.  
  1648.    The `BreakWindow' handles all breakpoints and contains the functions
  1649. that are needed with breakpoints.  In general breakpoints are addresses
  1650. in the program where the task should be stopped.  The breakpoints are
  1651. handled global so they aren't deleted when close the window.
  1652.  
  1653. Local Menus
  1654. -----------
  1655.  
  1656.    * Toggle
  1657.  
  1658.      activates and disactivates all breakpoints.
  1659.  
  1660.    * All
  1661.  
  1662.      selects all breakpoints.
  1663.  
  1664.    * Clear
  1665.  
  1666.      unselects all breakpoints.
  1667.  
  1668.    * On
  1669.  
  1670.      activates all selected breakpoints.
  1671.  
  1672.    * Off
  1673.  
  1674.      disactivates all selected breakpoints.
  1675.  
  1676.    * Hit
  1677.  
  1678.      sets the amount of hits for a breakpoint until it should stop the
  1679.      program. Default is 1.
  1680.  
  1681.    * ?
  1682.  
  1683.      shows the hunk where the breakpoint is located and if the
  1684.      breakpoint is equal to a symbol.
  1685.  
  1686.    * Input
  1687.  
  1688.      this breakpoint sets and removes a breakpoint.
  1689.  
  1690.    * Pick
  1691.  
  1692.      this breakpoint sets and removes a breakpoint using the symbol
  1693.      list.
  1694.  
  1695.    * Delete
  1696.  
  1697.      removes every selected breakpoint.
  1698.  
  1699.    * Goto
  1700.  
  1701.      opens a DissWindow for every selected breakpoint.
  1702.  
  1703.    * Run
  1704.  
  1705.      runs the program until the PC hits a selected breakpoint.
  1706.  
  1707. Usage of BDebug
  1708. ***************
  1709.  
  1710. The Watchpoint Window
  1711. =====================
  1712.  
  1713. Watchpoint window
  1714. -----------------
  1715.  
  1716.    The `Watchwindow' allows to set breakpoints that aren't dependend on
  1717. a certain PC address but from other conditions.  Every watchpoint has a
  1718. condition,data width and state if it's activated or not.  There are 3
  1719. types of different watchpoints available now.  The `Memory' watchpoint
  1720. compares the saved contents of the address with the current contents
  1721. and dependent on the condition the program is stopped or not.  The
  1722. `Register' watchpoint compares the saved contents of a register with
  1723. the current contents and dependent on the condition the program is
  1724. stopped or not.  The `Argument' watchpoint compares the saved value of
  1725. an argument with the current contents and dependent on the condition the
  1726. program is stopped or not.  The last watchpoint type is the most
  1727. powerful because it can simulate the first two types with the cost of a
  1728. slowdown.  The use of watchpoints is very time consuming because the
  1729. whole program is run in single stepping To use watchpoints you have to
  1730. run the task with `Run Watched Task'.
  1731.  
  1732.      If an error happens during a dynamic argument in the exception
  1733.      handler the screen is blinked.
  1734.  
  1735.  
  1736. Local Menus
  1737. -----------
  1738.  
  1739.    * Toggle
  1740.  
  1741.      activates and disactivates all watchpoints.
  1742.  
  1743.    * All
  1744.  
  1745.      selects all watchpoints.
  1746.  
  1747.    * Clear
  1748.  
  1749.      unselects all watchpoints.
  1750.  
  1751.    * On
  1752.  
  1753.      activates all selected watchpoints.
  1754.  
  1755.    * Off
  1756.  
  1757.      disactivates all selected watchpoints.
  1758.  
  1759.    * Add
  1760.  
  1761.      opens a requester where the parameter for a watchpoint have to be
  1762.      adjusted and adds the new watchpoint to the list.  If you
  1763.      doubeclick on a watchpoint you can change the parameter.
  1764.  
  1765.    * Refresh
  1766.  
  1767.      refreshes the watchpoint arguments.
  1768.  
  1769.    * Check
  1770.  
  1771.      checks all selected watchpoints.
  1772.  
  1773.    * Delete
  1774.  
  1775.      removes all selected watchpoints.
  1776.  
  1777. Usage of BDebug
  1778. ***************
  1779.  
  1780. The Checksum Window
  1781. ===================
  1782.  
  1783. Checksum Window
  1784. ---------------
  1785.  
  1786.    The `ChecksumWindow' controlls all checksum areas that are been
  1787. checked each time the task stops.  Helpful to find illegal random
  1788. writes bugs.  The checkpoints are controlled global so they aren't
  1789. deleted when you close the window.
  1790.  
  1791. Local Menus
  1792. -----------
  1793.  
  1794.    * Toggle
  1795.  
  1796.      activates or disactivates all checksum areas.
  1797.  
  1798.    * All
  1799.  
  1800.      selects all checksum areas.
  1801.  
  1802.    * Clear
  1803.  
  1804.      unselects all checksum areas.
  1805.  
  1806.    * On
  1807.  
  1808.      activates all selected checksum areas.
  1809.  
  1810.    * Off
  1811.  
  1812.      disactivates all selected checksum areas.
  1813.  
  1814.    * Address
  1815.  
  1816.      adds a checksum area into the list.
  1817.  
  1818.    * Hunk
  1819.  
  1820.      adds a hunk of the current process into the checksum area list.
  1821.  
  1822.    * Task
  1823.  
  1824.      adds a hunk of selectable process into the checksum area list.
  1825.  
  1826.    * Refresh
  1827.  
  1828.      calculate a new checksum for all selected areas.
  1829.  
  1830.    * Delete
  1831.  
  1832.      removes all selected checksum areas.
  1833.  
  1834.    * Check
  1835.  
  1836.      checks all areas for checksum errors.
  1837.  
  1838. Usage of BDebug
  1839. ***************
  1840.  
  1841. Requester Arguments
  1842. ===================
  1843.  
  1844. Argument Structur
  1845. -----------------
  1846.  
  1847.    An argument can use absolut values,symbols and registers as operands
  1848. and the operators +,-,*,/,|,!,&,<<,>>,~.  Additionally to the normal
  1849. symbols there are some special symbols available.
  1850.  
  1851.    * By {Argument}.[b,w,l] you can read from a memory address, that is
  1852.      defined by the argument. If you specify an illegal address that
  1853.      isn't defined in the legal memory space an error is shown.
  1854.  
  1855.    * \#d?  represents the address of the `Disswindows' with the ID ?
  1856.  
  1857.    * \#m?  represents the address of the `Memwindows' with the ID ?
  1858.  
  1859.    * \#c?  represents the address of the `Coppwindows' with the ID ?
  1860.  
  1861.    * \#h?  represents the address of the hunk ?.  Helpful for enforcer
  1862.      Hunk:Offset output
  1863.  
  1864.    * \#ea? represents the address of the EA with the number ?.  Check
  1865.      Register Window.
  1866.  
  1867.    * \#em? represents the contents where the address EA number ?
  1868.      points to.  Check Register Window. If the address EA is illegal an
  1869.      error is shown.
  1870.  
  1871.    * \#ls  represents the start address of a loaded binary file.
  1872.  
  1873.    * \#le  represents the end address of a loaded binary file.
  1874.  
  1875.    * \#ll  represents the length address of a loaded binary file.
  1876.  
  1877.    * \#p   represents the start address of the programs.  Only true for
  1878.      a loaded program.
  1879.  
  1880.    If you have the following Enforcer Hit output `Hunk 0:$11c' you can
  1881. calculate the adress by entering the argument #h0+$11c.
  1882.  
  1883. Usage of BDebug
  1884. ***************
  1885.  
  1886. Technical Informations
  1887. ======================
  1888.  
  1889. Exceptions
  1890. ----------
  1891.  
  1892.    The Debugger can catch all exceptions if the system is still working.
  1893. If an exception is caused the traphandler catches the exception and
  1894. tells the Debugger what went on so it can react on the exception.  If
  1895. the exception wasn't caused by the Debugger the type and the possible
  1896. reason for the exception is shown.  The `Return-Adress' of the debugged
  1897. task points on an internal `ILLEGAL'. If the PC points on this `ILLEGAL'
  1898. the task is closed and all windows are removed.  You should step over
  1899. this `ILLEGAL' because it increases possibility of a system crash.  If
  1900. a task is caught by `Debug Next Task' and notices a `finalPC' pointer
  1901. the `Return-Adress' isn't set on an internal `ILLEGAL' because the
  1902. `finalPC' pointer is sometimes used for parsing an argument.  In this
  1903. case the Debugger notices that the task ends by the RemTask() function.
  1904.  
  1905.      If the task changes the `Return-Adress' the Debugger tries to
  1906.      determine the taskend by `RemTask'.
  1907.  
  1908.  
  1909. Exception Handler
  1910. -----------------
  1911.  
  1912.    Every task contains in the task structure a pointer to its exception
  1913. handler that is named `TC_TRAPCODE' When an exception happens in this
  1914. task the exception checks if the Debugger knows this task.  If this is
  1915. not the case something seriously is broken and the Deadend Alert
  1916. 35000000 will be poped up.  If all goes well the registers are saved,
  1917. the Debugger task gets a message and the exception handler waits for a
  1918. msg by the Debugger to go on.  When the Debugger gets the message it
  1919. causes the appropriate function. For example refreshing the windows.
  1920. If the Debugger gets a step command it sends the exception handler the
  1921. appropriate message and the handler does a step.
  1922.  
  1923. Debug Informations
  1924. ------------------
  1925.  
  1926.    Currently the following formats are supported.
  1927.  
  1928.    * BASM Specialformat This format allows the Debugger to decide if
  1929.      the code is in the Mainpart,Includes or in a Macro.
  1930.  
  1931.    * SAS D1 This format only allows a Source-Code connection.  It
  1932.      doesn't support local variables,Structures and Macros.
  1933.  
  1934.    * GCC STABS This format is very powerful and offers all a
  1935.      source-level Debugger needs.  Unfortunately the Debugger only
  1936.      supports a simple Source-Code connection at the moment.  It's
  1937.      planned to support more in the future.
  1938.  
  1939. GCC Compiler and BDebug
  1940. -----------------------
  1941.  
  1942.    Unfortunately you can't debug programs that are using the current
  1943. `ixemul.library' because in Openlibrary() initroutine the Task field
  1944. TC_TRAPCODE is changed.  Hopefully there'll be soon an `ixemul.library'
  1945. available that doesn't change the traphandler.  If you're using GCC
  1946. with the link lib `gerlib' that is available on Aminet FTP Servers you
  1947. shouldn't experience any problems with BDebug.
  1948.  
  1949. Usage of BDebug
  1950. ***************
  1951.  
  1952. Configuration
  1953. =============
  1954.  
  1955.    The default configuration file is named `BDEBUG.Config' and is
  1956. located in the directory `<BarflyPath>/' or `s:Barfly/'.  Obviously
  1957. it's not optimal to be forced to use the same config file for different
  1958. programs. Therefore you can also specify a local config file with
  1959. program name and the suffix `.BDebug'.
  1960.  
  1961. ToolTypes
  1962. ---------
  1963.  
  1964.    The following tooltypes are supported to activate the know functions
  1965. of the commandwindow.
  1966.  
  1967.    * CatchNextTask
  1968.  
  1969.    * CatchCrashedTask
  1970.  
  1971.    * CatchEnforcerHit
  1972.  
  1973. Barfly.FD
  1974. ---------
  1975.  
  1976.    If you want to create a new `Barfly.FD' file that contains the
  1977. library function name you have to follow the following the instructions.
  1978. First the assign `FD:' has to point to the directory that contains the
  1979. FD files that should be contained in the new `Barfly.FD'.  Afterwards
  1980. you should check every FD file if the Library, Resource, Device name
  1981. exist in the first line in the following style: `* "foobar.libary"'.
  1982. If this is not the case you have to add the name yourself so that a
  1983. correct FD database can be build up.  If you're more experienced with
  1984. FD files you can yourself add new entries to the `Barfly.FD' file
  1985. because the layout is pretty obvious.
  1986.  
  1987. Configuration Commands
  1988. ----------------------
  1989.  
  1990. Register window
  1991. ---------------
  1992.  
  1993. RegWindow=x/y/width/height/register
  1994. ...................................
  1995.  
  1996.    This command defines the position of a `REGWindow'.
  1997.  
  1998. RegFlags=flag[|flags...]
  1999. ........................
  2000.  
  2001.    This command defines certain flags in the `REGWindows'.
  2002.  
  2003.    * AUTOVIEWREFRESH
  2004.  
  2005.    * SYMBOLS
  2006.  
  2007.    * STACKCHECK
  2008.  
  2009.    * NOBIGVIEW
  2010.  
  2011. FPU Window
  2012. ----------
  2013.  
  2014. FpuWindow=x/y/width/height/register
  2015. ...................................
  2016.  
  2017.    This command defines the position of a `FPUWindow'.
  2018.  
  2019. OpenFPUWindows=Count
  2020. ....................
  2021.  
  2022.    This command tells the Debugger to open a `FPUWindow'.
  2023.  
  2024. Disassembler window
  2025. -------------------
  2026.  
  2027. DissWindow=x/y/width/height/register
  2028. ....................................
  2029.  
  2030.    This command defines the position,the dimension and linked register
  2031. of the `DissWindow'.
  2032.  
  2033.    Beispiel: DISSWINDOW=0/0/300/100/PC
  2034.  
  2035. DissFlags=flag[|flags...]
  2036. .........................
  2037.  
  2038.    This command defines certain flags in the `DISSWindow'.
  2039.  
  2040.    * AUTOREFRESH
  2041.  
  2042.    * SHOWLIB
  2043.  
  2044.    * GUESSLIB
  2045.  
  2046.    * SHOWEA
  2047.  
  2048.    * WORDBRANCHES
  2049.  
  2050.    * NEGOFFSETS
  2051.  
  2052.    * NEGDI
  2053.  
  2054.    * OPCODEDATA
  2055.  
  2056.    * BLANKAFTERJMPBRA
  2057.  
  2058. OpenDissWindows=Count
  2059. .....................
  2060.  
  2061.    This command tells the Debugger to open a number of `DissWindows'.
  2062.  
  2063. Memory window
  2064. -------------
  2065.  
  2066. MemWindow=x/y/width/height/register
  2067. ...................................
  2068.  
  2069.    This command defines the position,the dimension and linked register
  2070. of the `MemWindow'.
  2071.  
  2072.    Example: MEMWINDOW=0/0/300/100/A0
  2073.  
  2074. OpenMemWindows=Count
  2075. ....................
  2076.  
  2077.    This command tells the Debugger to open a number of `MemWindows'.
  2078.  
  2079. MemoryOffsetStep=Count
  2080. ......................
  2081.  
  2082.    This command defines the Offset-Step of the `MemWindows'.
  2083.  
  2084.    * 0 no Space
  2085.  
  2086.    * 1 Space after each Byte.
  2087.  
  2088.    * 2 Space after each Word.
  2089.  
  2090.    * 4 Space after each Longword.
  2091.  
  2092. Copper window
  2093. -------------
  2094.  
  2095. CoppWindow=x/y/width/height/register
  2096. ....................................
  2097.  
  2098.    This command defines the position,the dimension and linked register
  2099. of the `CoppWindow'.
  2100.  
  2101.    Example: COPPWINDOW=0/0/300/100/A0
  2102.  
  2103. OpenCoppWindows=Count
  2104. .....................
  2105.  
  2106.    This command tells the Debugger to open a number of `CoppWindows'.
  2107.  
  2108. StructWindow
  2109. ------------
  2110.  
  2111. StructWindow=x/y/width/height/register
  2112. ......................................
  2113.  
  2114.    This command defines the position,the dimension and linked register
  2115. of the `StructWindow'.
  2116.  
  2117.    Example: StructWINDOW=0/0/300/100/A0
  2118.  
  2119. StructFlags=flag[|flags...]
  2120. ...........................
  2121.  
  2122.    This command defines certain flags for the `StructWindow'
  2123.  
  2124.    * AUTOREFRESH
  2125.  
  2126.    * ADDRESSFORMAT
  2127.  
  2128.    * OFFSETFORMAT
  2129.  
  2130.    * NEWWINDOW
  2131.  
  2132. OpenStructWindows=Count
  2133. .......................
  2134.  
  2135.    This command tells the Debugger to open a number of `StructWindows'.
  2136.  
  2137. Source window
  2138. -------------
  2139.  
  2140. SourceWindow=x/y/width/height/register
  2141. ......................................
  2142.  
  2143.    This command defines the position,the dimension and linked register
  2144. of the `SourceWindow'.
  2145.  
  2146.    Example: SOURCEWINDOW=0/0/300/100/A0
  2147.  
  2148. OpenSourceWindows=Count
  2149. .......................
  2150.  
  2151.    This command tells the Debugger to open a number of `SourceWindows'.
  2152.  
  2153. Breakpoint window
  2154. -----------------
  2155.  
  2156. BreakWindow=x/y/width/height
  2157. ............................
  2158.  
  2159.    This command defines the position of a `BreakPointWindow'.
  2160.  
  2161. OpenBreakWindows=Count
  2162. ......................
  2163.  
  2164.    This command tells the Debugger to open a `BreakPointWindow'.
  2165.  
  2166. Watchpoint window
  2167. -----------------
  2168.  
  2169. WatchWindow=x/y/width/height
  2170. ............................
  2171.  
  2172.    This command defines the position of a `WatchpoinzWindow'.
  2173.  
  2174. OpenWatchWindows=Count
  2175. ......................
  2176.  
  2177.    This command tells the Debugger to open a `WatchPointWindow'.
  2178.  
  2179. Checksum window
  2180. ---------------
  2181.  
  2182. ChecksumWindow=x/y/width/height
  2183. ...............................
  2184.  
  2185.    This command defines the position of a `ChecksumWindow'.
  2186.  
  2187. ChecksumWindows=Count
  2188. .....................
  2189.  
  2190.    This command tells the Debugger to open a `ChecksumWindow'.
  2191.  
  2192. SnoopMemory window
  2193. ------------------
  2194.  
  2195. SnoopMemWindow=x/y/width/height/register
  2196. ........................................
  2197.  
  2198.    This command defines the position of a `SnoopMemWindow'.
  2199.  
  2200. OpenSnoopMemWindow=Count
  2201. ........................
  2202.  
  2203.    This command tells the Debugger to open a `SnoopMemWindow'.
  2204.  
  2205. SnoopMask=Mask
  2206. ..............
  2207.  
  2208.    This command defines the snoop mask. The mask defines the length of
  2209. memory blocks that should be recorded.  Default is -1 so everything is
  2210. recorded.
  2211.  
  2212. SnoopMax=Count
  2213. ..............
  2214.  
  2215.    This command defines the count of snoop entries.  Default is 100.
  2216.  
  2217. HistoryEntrys=Count
  2218. ...................
  2219.  
  2220.    This command defines the count of history entries.  Default is 5.
  2221.  
  2222. Information Windows
  2223. -------------------
  2224.  
  2225. GlobalViewWindow=x/y/width/height
  2226. .................................
  2227.  
  2228.    This command defines the position and dimensions of a standard
  2229. information window. For example the Library Window belongs to this
  2230. group.
  2231.  
  2232.    Example: GLOBALVIEWWINDOW=0/0/300/100
  2233. GLOBALVIEWWINDOW=0/200/300/100
  2234.  
  2235. Other Windows
  2236. -------------
  2237.  
  2238. CommandWindow=x/y/width/height
  2239. ..............................
  2240.  
  2241.    This command defines the position of the small `CommandWindow'.
  2242. This command has no function in local configuration files.
  2243.  
  2244. FileShell=<Window Specifikation>
  2245. ................................
  2246.  
  2247.    This command defines the shell that is opened with the loaded
  2248. program. You should always open the shell on the Debugger's Public
  2249. Screen. The shell parameters are the same you know from the CLI.
  2250.  
  2251. Misc
  2252. ----
  2253.  
  2254. TaskStack=Count
  2255. ...............
  2256.  
  2257.    This command defines the stack of the loaded program.  Defaullt are
  2258. 4096 Bytes.
  2259.  
  2260. Priority=Count
  2261. ..............
  2262.  
  2263.    This command defines the Debugger's priority.
  2264.  
  2265. SetBreak=Argument
  2266. .................
  2267.  
  2268.    This command can be used to define a list of breakpoints that are
  2269. set before the program is started.  This is useful to pass the module
  2270. `Main.c' for example.  If no breakpoints are defined or if a parsing
  2271. problem occurs the standard breakpoint,first program instruction, is
  2272. set.
  2273.  
  2274.    * SETBREAK=_main    ; SAS C Main Program Start
  2275.  
  2276.    * SETBREAK=_main    ; GCC C Main Program Start
  2277.  
  2278.    * SETBREAK=@main   ; DICE C Main Program Start
  2279.  
  2280.    * SETBREAK=!    ; Programstart(Default)
  2281.  
  2282. ClickBreak=State
  2283. ................
  2284.  
  2285.    This command can be used to define the action of the DissWindow on a
  2286. doubleclick.
  2287.  
  2288. `State=0'
  2289.      No Action(Default).
  2290.  
  2291. `State=1'
  2292.      Set/Clear Breakpoint and pop up a Requester for a Set.
  2293.  
  2294. `State=2'
  2295.      Set/Clear Breakpoint.
  2296.  
  2297. ShowMem=Start:End
  2298. .................
  2299.  
  2300.    defines the adress areas that are legal to the Debugger so you can
  2301. look at adress areas that are not in the memorylist or in the rom.
  2302. Illegal adress areas are shown with `*' in the windows.  You should
  2303. `never' define the custom chip areas as legal because a read access on
  2304. a writeonly register can cause a deadly crash.
  2305.  
  2306.    Example: SHOWMEM=$e80000:$f00000          defines the Zorro 2 area
  2307. as free.
  2308.  
  2309.      By this command you can overrule the internal enforcer legal
  2310.      memory areas so you should beware of hits.
  2311.  
  2312.  
  2313. DefCommand=Key,Qualifier[|Qualifier...],Function
  2314. ................................................
  2315.  
  2316.    This commands allows to connect menu functions with key sequences.
  2317. Because of the object-oriented concept of the Debugger that allowes
  2318. multiple instances of objects it's not easy to decide what object is
  2319. meant.  Therefore if the object is active it's used and if no object of
  2320. this type is active the first entry the object-type list is used.  As
  2321. the key parameter every Rawkey can be used with the exception of `TAB'
  2322. and the functionkeys that are used internal.  The key is searched first
  2323. in the local and then in the global configuration.
  2324.  
  2325.    As qualifiers you can use the following keys.
  2326.  
  2327.    * LSHIFT
  2328.  
  2329.    * RSHIFT
  2330.  
  2331.    * CAPSLOCK
  2332.  
  2333.    * CTRL
  2334.  
  2335.    * LALT
  2336.  
  2337.    * RALT
  2338.  
  2339.    * LCOMMAND
  2340.  
  2341.    * RCOMMAND
  2342.  
  2343.           Bespiel:      DEFCOMMAND=$15,CTRL,"Step 1 Position"
  2344.  
  2345.      Defines CTRL-Z as Step 1 Position
  2346.  
  2347. AutoDocDir=<Path>
  2348. .................
  2349.  
  2350.    This command sets the path for the autodocs directory.
  2351.  
  2352. AutoDocAlias=Library,File
  2353. .........................
  2354.  
  2355.    This command sets an alias for Libraries,Devices or Resources to
  2356. define the connected Autodocs file.  There's no other way because it's
  2357. not possible to build the autodocs file by knowing the library name.
  2358.  
  2359. ArexxPath=<rx-path>
  2360. ...................
  2361.  
  2362.    This command sets the Arexx-Script Start-Command.  In a normal
  2363. system the path should be <sys:Rexxc/rx>.
  2364.  
  2365. ArexxInput=<File>
  2366. .................
  2367.  
  2368.    This command sets the Arexx-Command Input-File.  If you don't
  2369. specify the file, NIL: is used.
  2370.  
  2371. ArexxOutput=<File>
  2372. ..................
  2373.  
  2374.    This command sets the Arexx-Command Output-File.  If you don't
  2375. specify the file, NIL: is used.
  2376.  
  2377. ArexxCommand=[1...10],<Pfad>
  2378. ............................
  2379.  
  2380.    This command sets the 10 entries in the Arexx-Menu.  You specify the
  2381. number and the path of the Arexx-Script.
  2382.  
  2383.    ArexxCommand=1,"Rexx:Example.rexx"
  2384.  
  2385. ExecuteCommand=<File>
  2386. .....................
  2387.  
  2388.    this command can set up a list of programs that should be run before
  2389. the debugged program's task is started.  This parameter only works with
  2390. programs that are loaded by the Debugger. Furthermore you have to make
  2391. sure that the loaded programs have to `end' otherwise the task can't be
  2392. started.  For example you could use these command to set breakpoints
  2393. with Arexx-Scripts.
  2394.  
  2395. LoadInclude
  2396. ...........
  2397.  
  2398.    tells the Debugger to load the structure information file
  2399. `Barfly.Include'.
  2400.  
  2401. AddStructFile=Filename
  2402. ......................
  2403.  
  2404.    tells the Debugger to load a custom structure information file and
  2405. adds it into the CUSTOM/ subtree.
  2406.  
  2407. ClicktoFront
  2408. ............
  2409.  
  2410.    activates the Debugger's own `ClicktoFront' handler.  This function
  2411. should only be used if you don't use an own `Commodity' for this task.
  2412.  
  2413. CenterWindow
  2414. ............
  2415.  
  2416.    activates the centering mode for every stringrequester windows.
  2417.  
  2418. ScreenInFront
  2419. .............
  2420.  
  2421.    activates the `ScreenToFront' mode that pops the screen to front
  2422. after every trace operation.
  2423.  
  2424. OpenScreen[=width,height,depth,mode]
  2425. ....................................
  2426.  
  2427.    tells the Debugger to open an own screen.  If you don't enter
  2428. dimension parameters the wb screen is cloned. You can use the
  2429. screenmodes in the mode string that you can see in the
  2430. `Prefs/ScreenMode' requester.  This command has no function in local
  2431. configuration files.
  2432.  
  2433.    OPENSCREEN=1448,560,2,PAL:HighRes Interlace
  2434.  
  2435. OpenPubScreen=Name
  2436. ..................
  2437.  
  2438.    tells the Debugger to open on the Pubscreen with the specified name.
  2439. This command has no function in local configuration files.
  2440.  
  2441. ScreenFont=fontname/Height
  2442. ..........................
  2443.  
  2444.    defines a font for a Debugger screen.  This command has no function
  2445. in local configuration files.
  2446.  
  2447. QuietException=Exception Nummer
  2448. ...............................
  2449.  
  2450.    masks off certain exceptions for the exception requester so that
  2451. only a `DisplayBeep' is caused instead of a textrequest.  With the
  2452. value -1 you can mask off every exception and for example with the
  2453. value 4 you mask off the `Illegal' exception.
  2454.  
  2455. DisableXPointer
  2456. ...............
  2457.  
  2458.    disactivate the Wait-Pointer.
  2459.  
  2460. TraceBreak
  2461. ..........
  2462.  
  2463.    tells the Debugger to use breakpoints in the `Subroutine' Traces
  2464. instead of single steps.  The advantage is a speed up and the
  2465. disadvantage is that you can cause crashes while you step through
  2466. resident/reentry code.
  2467.  
  2468. CrashedTask
  2469. ...........
  2470.  
  2471.    activates the `CatchCrashedTask' mode.
  2472.  
  2473. CatchEnforcerHit
  2474. ................
  2475.  
  2476.    activates the `CatchEnforcerHit' mode.
  2477.  
  2478. DoNotCacheFullFile
  2479. ..................
  2480.  
  2481.    tells the Debugger not to cache program files while reading the
  2482. Symbol/Debug informationen to save memory.  Obviously the parsing speed
  2483. will decrease.
  2484.  
  2485. DoNotPopPathRequest
  2486. ...................
  2487.  
  2488.    tells the Debugger to ignore errors from opening source files and
  2489. not to open a path requester.
  2490.  
  2491. NoAutoStructAction
  2492. ..................
  2493.  
  2494.    tells the Debugger to open a type-requester by an action in the
  2495. StructurWindow.
  2496.  
  2497. NoBreakpointErrors
  2498. ..................
  2499.  
  2500.    tells the Debugger to ignore SETBREAK= errors that cause the
  2501. Debugger to always set an error on the program start.
  2502.  
  2503. Usage of BDebug
  2504. ***************
  2505.  
  2506. Arexx
  2507. =====
  2508.  
  2509. Commands
  2510. --------
  2511.  
  2512. SIMPLEREQUEST "
  2513. ...............
  2514.  
  2515.    * RC: -
  2516.  
  2517.    * result: 'OK'
  2518.  
  2519. TWOGADREQUEST "
  2520. ...............
  2521.  
  2522.    * RC: -
  2523.  
  2524.    * result: 'OK','FALSE'
  2525.  
  2526. TRIGADREQUEST "
  2527. ...............
  2528.  
  2529.    * RC: -
  2530.  
  2531.    * result: 'OK','FALSE','RESUME'
  2532.  
  2533. NEXT_ROOTWINDOW
  2534. ...............
  2535.  
  2536.    * RC: -
  2537.  
  2538.    * result: 'OK','FALSE'
  2539.  
  2540. NEXT_SUBWINDOW
  2541. ..............
  2542.  
  2543.    * RC: -
  2544.  
  2545.    * result: 'OK','FALSE'
  2546.  
  2547. FIRST_DISSWINDOW
  2548. ................
  2549.  
  2550.    * RC: -
  2551.  
  2552.    * result: 'OK','FALSE'
  2553.  
  2554. FIRST_MEMWINDOW
  2555. ...............
  2556.  
  2557.    * RC: -
  2558.  
  2559.    * result: 'OK','FALSE'
  2560.  
  2561. FIRST_COPPWINDOW
  2562. ................
  2563.  
  2564.    * RC: -
  2565.  
  2566.    * result: 'OK','FALSE'
  2567.  
  2568. FIRST_FPUWINDOW
  2569. ...............
  2570.  
  2571.    * RC: -
  2572.  
  2573.    * result: 'OK','FALSE'
  2574.  
  2575. FIRST_BREAKPOINTWINDOW
  2576. ......................
  2577.  
  2578.    * RC: -
  2579.  
  2580.    * result: 'OK','FALSE'
  2581.  
  2582. FIRST_STRUCTWINDOW
  2583. ..................
  2584.  
  2585.    * RC: -
  2586.  
  2587.    * result: 'OK','FALSE'
  2588.  
  2589. FIRST_SOURCEWINDOW
  2590. ..................
  2591.  
  2592.    * RC: -
  2593.  
  2594.    * result: 'OK','FALSE'
  2595.  
  2596. FIRST_SNOOPWINDOW
  2597. .................
  2598.  
  2599.    * RC: -
  2600.  
  2601.    * result: 'OK','FALSE'
  2602.  
  2603. FIRST_WATCHWINDOW
  2604. .................
  2605.  
  2606.    * RC: -
  2607.  
  2608.    * result: 'OK','FALSE'
  2609.  
  2610. ACTIVATE_ROOTWINDOW
  2611. ...................
  2612.  
  2613.    * RC: -
  2614.  
  2615.    * result: 'OK','FALSE'
  2616.  
  2617. ACTIVATE_SUBWINDOW
  2618. ..................
  2619.  
  2620.    * RC: -
  2621.  
  2622.    * result: 'OK','FALSE'
  2623.  
  2624. OPEN_DISSWINDOW '@REG' | 'Argument'
  2625. ...................................
  2626.  
  2627.    * RC: -
  2628.  
  2629.    * result: -
  2630.  
  2631. OPEN_MEMWINDOW '@REG' | 'Argument'
  2632. ..................................
  2633.  
  2634.    * RC: -
  2635.  
  2636.    * result: -
  2637.  
  2638. OPEN_COPPWINDOW '@REG' | 'Argument'
  2639. ...................................
  2640.  
  2641.    * RC: -
  2642.  
  2643.    * result: -
  2644.  
  2645. OPEN_SOURCEWINDOW '@REG' | 'Argument'
  2646. .....................................
  2647.  
  2648.    * RC: -
  2649.  
  2650.    * result: -
  2651.  
  2652. OPEN_STRUCTWINDOW '@REG' | 'Argument'
  2653. .....................................
  2654.  
  2655.    * RC: -
  2656.  
  2657.    * result: -
  2658.  
  2659. OPEN_BREAKPOINTWINDOW
  2660. .....................
  2661.  
  2662.    * RC: -
  2663.  
  2664.    * result: -
  2665.  
  2666. OPEN_FPUWINDOW
  2667. ..............
  2668.  
  2669.    * RC: -
  2670.  
  2671.    * result: -
  2672.  
  2673. OPEN_SNOOPMEMORYWINDOW
  2674. ......................
  2675.  
  2676.    * RC: -
  2677.  
  2678.    * result: -
  2679.  
  2680. DOMENU 'Menu-String'
  2681. ....................
  2682.  
  2683.    * RC: -
  2684.  
  2685.    * result: -
  2686.  
  2687. SET_BREAKPOINT 'Argument'
  2688. .........................
  2689.  
  2690.    * RC: -
  2691.  
  2692.    * result: 'OK','FALSE'
  2693.  
  2694. CLEAR_ICACHE 'Address,Length'
  2695. .............................
  2696.  
  2697.    * RC: -
  2698.  
  2699.    * result: 'OK'
  2700.  
  2701. CLEAR_ICACHE 'Address,Length'
  2702. .............................
  2703.  
  2704.    * RC: -
  2705.  
  2706.    * result: 'OK'
  2707.  
  2708. GOTO_ADDRESS 'Address'
  2709. ......................
  2710.  
  2711.    * RC: -
  2712.  
  2713.    * result: 'OK','FALSE'
  2714.  
  2715. CLEAR_ADDRESS
  2716. .............
  2717.  
  2718.    * RC: -
  2719.  
  2720.    * result: 'OK','FALSE'
  2721.  
  2722. LINK_REGISTER 'Register'
  2723. ........................
  2724.  
  2725.    * RC: -
  2726.  
  2727.    * result: 'OK','FALSE'
  2728.  
  2729. SET_REGISTER 'Register,Value'
  2730. .............................
  2731.  
  2732.    * RC: -
  2733.  
  2734.    * result: 'OK','FALSE'
  2735.  
  2736. Read_Byte 'Address'
  2737. ...................
  2738.  
  2739.    RC    : 0=Ok    Result: Result-String
  2740.  
  2741. Read_Word 'Address'
  2742. ...................
  2743.  
  2744.    RC    : 0=Ok    Result: Result-String
  2745.  
  2746. Read_Long 'Address'
  2747. ...................
  2748.  
  2749.    RC    : 0=Ok    Result: Result-String
  2750.  
  2751. Write_Byte 'Address,Value'
  2752. ..........................
  2753.  
  2754.    RC    : 0=Ok
  2755.  
  2756. Write_Word 'Address,Value'
  2757. ..........................
  2758.  
  2759.    RC    : 0=Ok
  2760.  
  2761. Write_Long 'Address,Value'
  2762. ..........................
  2763.  
  2764.    RC    : 0=Ok
  2765.  
  2766. ASL_FileRequester_Save
  2767. ......................
  2768.  
  2769.    RC    : 0=Ok    Result: Filepath-String
  2770.  
  2771. ASL_FileRequester_Load
  2772. ......................
  2773.  
  2774.    RC    : 0=Ok    Result: Filepath-String
  2775.  
  2776. IS_ADDRESS_LEGAL 'Address'
  2777. ..........................
  2778.  
  2779.    * RC: -
  2780.  
  2781.    * result: 'OK','FALSE'
  2782.  
  2783. LOAD_BINARY 'Name,Destination,Length'
  2784. .....................................
  2785.  
  2786. SAVE_BINARY 'Name,Source,Length'
  2787. ................................
  2788.  
  2789. Usage of BDebug
  2790. ***************
  2791.  
  2792. How to use BDebug ?
  2793. ===================
  2794.  
  2795. Problemanalysis
  2796. ---------------
  2797.  
  2798.    First you should be sure that all necessary configurations file have
  2799. been installed because without `Barfly.FD' file you don't see any
  2800. function names in the disassembler window; and without `Barfly.Include'
  2801. the `StructWindow' is unusable.  Are these preconditions fullfilled you
  2802. should analyse the problem and anticipate how the Debugger can be used.
  2803. Because the debugging of programs depends heavily on the situation i
  2804. can only list some general points.  The reality probably looks
  2805. different... as always:-)
  2806.  
  2807.    Point of departure:
  2808.  
  2809.    * Program from the CLI
  2810.  
  2811.         * 1 Task
  2812.  
  2813.           The program can be started by `bdebug Program [Argument]' or
  2814.           can be loaded the command window `Debug File'.  By this
  2815.           method all symbol and debug files are loaded.  If the
  2816.           Debugger can't find one source file you can add additional
  2817.           paths if you haven't disabled this function.  The standard
  2818.           breakpoint is the first command in the program.  Sometimes
  2819.           this uncomfortable and so you can set a different start
  2820.           breakpoint for example to jump over the CStartup code or to
  2821.           set it on an important program position.
  2822.  
  2823.         * Creates further Tasks
  2824.  
  2825.           In this case you should be sure how you wanna catch the next
  2826.           Task. You could catch the Task by `Next Task' or compile the
  2827.           program with an `illegal' in the task and catch it with
  2828.           `Crashed Task'.  After you caught the task you probably would
  2829.           like to use see symbole and debug source.  These
  2830.           Informationen can be loaded afterwards by using `Load
  2831.           Symbols'.
  2832.  
  2833.    * Program from the WB
  2834.  
  2835.      In this case you should use `Next Task' and then catch the task
  2836.      `WBL'. Afterwards you have to activate `Next Task' again and run
  2837.      `WBL'. You could also use the `illegal' strategic.  After the
  2838.      right task was caught you can load the symbols again.
  2839.  
  2840.    * Is it a Handler, Filesystem or something simular.
  2841.  
  2842.      In this case you should use the `illegal' strategic and catch the
  2843.      task by `Crashed Task'.  An alternative method would be to catch
  2844.      the waiting task with `Debug Task' and wait as long as the task
  2845.      gets woken up by a signal.
  2846.  
  2847.    After you've solved the first stage how you can controll the problem
  2848. task you should think about how the problem looks like and where it
  2849. could be located.
  2850.  
  2851.    Problem Type:
  2852.  
  2853.    * Enforcer
  2854.  
  2855.      If an Enforcer Hit is caused Enforcer outputs the hit's program
  2856.      address and mostly also the hunk offset.  You can now directly
  2857.      jump to the address by entering the address in the DissWindow by
  2858.      `Change Address' or you open a HunkWindow, doubleclick on the hunk
  2859.      where the hit is located and then enter the offset Enforcer showed.
  2860.      The Debugger itself can also automaticly stop a debugged program
  2861.      if a hit happens.
  2862.  
  2863.    * Mungwall
  2864.  
  2865.      These hits aren't that easy to find as Enforcer hits because
  2866.      Mungwall hits aren't showed when the problem happened but only
  2867.      after a `FreeMem'.  In this case you should remember the
  2868.      memoryblock where it happened and determine where the responsible
  2869.      AllocMem is located in the program, so you get an overview between
  2870.      what area the problem is caused.  Now you should open a MemWindow
  2871.      that points to this certain memory area and step through the
  2872.      program and look if something changes the mungwall borders in the
  2873.      MemWindow.  Mungwall borders are before and after the allocated
  2874.      memory area.  If you're more experienced you could also use the
  2875.      WatchpointWindow and set a watchpoint on the certain memory block.
  2876.  
  2877.    * Crash
  2878.  
  2879.      If it's just an ordinary crash the error should be pretty easy to
  2880.      find single stepping through the responsible code area.  If it's a
  2881.      random crash you should be using `Crashed Task' and hope that the
  2882.      task can be caught.  After the task got caught you should check
  2883.      the instructions that cause the crash. If the PC points to data
  2884.      fields that don't look like real code the PC is probably set wrong
  2885.      by a stack cleanup error.  In this case you should check the nexts
  2886.      addresses on the stack if these point to legal program code.
  2887.  
  2888.    * Sideeffects and mysterious
  2889.  
  2890.      These bugs are the worst to find and there's no general strategic
  2891.      how to find them. In these cases only intuition and patience can
  2892.      help.
  2893.  
  2894. Problems that can happen
  2895. ------------------------
  2896.  
  2897.    * Why does the Debugger react so slow on keyboard commands that
  2898.      controll the tracing ?
  2899.  
  2900.      This happens if you debug a task with a higher priority as the
  2901.      Debugger's priority.  For example. DOS-Handler.  Workaround is to
  2902.      higher the priority of the Debugger.
  2903.  
  2904.    * Why does the Debugger blockate by opening the filerequester.
  2905.  
  2906.      This happens when you debug a handler, because the filerequester
  2907.      normally tests every handler with a IsFilesystem(). When you debug
  2908.      a handler it can't reply the IsFilesystem packet and therefore the
  2909.      filerequester is busy.
  2910.  
  2911.    * If you debug the following program on a 68040 with 68040.library
  2912.      or 68060.library the instruction `rts' is run if you cause a
  2913.      Single-Step on the instruction `fetox'.  Because this command
  2914.      isn't implemented in the 68040 and 68060 it has to be emulated. It
  2915.      seems to forget the tracebit.
  2916.  
  2917.               mc68040
  2918.               fmove.x    #1.3,fp0
  2919.               fmove.x    #255,fp1
  2920.               fetox.x    fp0,fp1
  2921.               rts
  2922.  
  2923.    * If a program doesn't return from a DOS funktion you could
  2924.      accidently entered a char in shell window.
  2925.  
  2926.                                BAsm 1.0
  2927.  
  2928.                    A cli/arexx controlled Assembler
  2929.  
  2930.                   Copyright (c) 1989-94 Ralph Schmidt
  2931.  
  2932.                              - Shareware -
  2933.  
  2934. The Assembler
  2935. *************
  2936.  
  2937.    The assembler understands the commands and addressmodes from the
  2938. 68000 through the 68060 and both the Floating-Point Units, 68881 and
  2939. 68882.  It supports only the 68851 MMU commands, which are also
  2940. supported by the 68030.  The assembler achieves it's speed by
  2941. translating the source in a single pass, followed by a backpatch phase
  2942. which corrects all unresolved references.
  2943.  
  2944. Syntax
  2945. ======
  2946.  
  2947. Comments
  2948. --------
  2949.  
  2950.    A comment can start in several different ways.  In a pure comment it
  2951. starts either with a ; or *.  A comment can only be started after an
  2952. assembler command or symbol with a ; if an assembler command or symbol
  2953. exists within that line.
  2954.  
  2955.          ;A comment
  2956.      *A comment
  2957.          move.l a0,a0    ;A comment
  2958.  
  2959. Opcode/Instructions arrangement
  2960. -------------------------------
  2961.  
  2962.    `[label[:]] [opcode] [operand[, operand[, operand...]]]]]'
  2963.  
  2964.    * Opcodes
  2965.  
  2966.      An Opcode can be a Motorola Mnemonic, an assembler command, or a
  2967.      Macro call.
  2968.  
  2969.    * Operations
  2970.  
  2971.      In a Motorola mnemonic operands are based on legal addressmoes; in
  2972.      assembler privat instructions the parameters depend on the
  2973.      instruction.
  2974.  
  2975. Symbol structure
  2976. ----------------
  2977.  
  2978.    A symbol can represent the following types:
  2979.  
  2980.    * Value
  2981.  
  2982.    * Program Counter
  2983.  
  2984.    * Register
  2985.  
  2986.    * Register List
  2987.  
  2988.    * Macro
  2989.  
  2990.    Symbols can only be defined once. The exceptions are local labels
  2991. and symbols defined by Set.
  2992.  
  2993.                      Structure rules for Symbols.
  2994.  
  2995.    * The first letter of a symbol can be one of the following: a...z,
  2996.      A...Z,_, @,. and \.
  2997.  
  2998.    * From the second letter on, the symbol can contain the following
  2999.      letters: a...z,A...Z,0...9, _,@ and ..
  3000.  
  3001.    * If a symbol consists of only numbers and ends with $, then it is a
  3002.      numerical local label.
  3003.  
  3004.    * A symbol is ended by an illegal letter.
  3005.  
  3006.    * If a symbol begins with a . or \, then it is a local label.
  3007.  
  3008.    * A macro symbol should not contain a ..
  3009.  
  3010.    * To avoid a conflict, a symbol should not end with .b,.w or .l.
  3011.  
  3012.  
  3013.      ThisIsALabel              ;That is a normal label
  3014.      ThisIsALabel1.loop:       ;That is a normal label
  3015.      This@_Is_@A_@Label
  3016.      1$:                       ;That is a numerical local label
  3017.      .ThisIsALabel             ;That is a local label
  3018.      .ThisIsALael1:            ;That is a local label
  3019.      \ThisIsALabel.loop:       ;That is a local label
  3020.      ThisIsASymbol=10
  3021.      ThisIsASymbol = 10
  3022.      ThisIsASymbol equ 10
  3023.  
  3024. The relative label
  3025. ------------------
  3026.  
  3027.    This symbol represents an offset to the start of a program.
  3028.  
  3029.  
  3030.      label
  3031.      label:
  3032.      label    nop
  3033.      label: nop
  3034.  
  3035. The local Label
  3036. ---------------
  3037.  
  3038.    A local label is only valid between two normal relative labels, thus
  3039. you cannot reference local labels outside of that scope.  Otherwise it
  3040. works simular as a normal label.  There are 2 different prefixes that
  3041. introduce a local label: . and \ that define 2 different local labels.
  3042. A special case is the Backward Reference Label that is introduced with
  3043. ... It doesn't depend on a certain define area between normal labels
  3044. thus you can only access the symbol if it were defined earlier.
  3045.  
  3046.  
  3047.      ..:
  3048.      label_0:
  3049.      .local:
  3050.       bra.s .local
  3051.      label_1:
  3052.      .local:
  3053.       bra.s \local
  3054.      \local:
  3055.       nop
  3056.      label_end:
  3057.      ..:
  3058.       dbra d0,..
  3059.      ..:
  3060.       dbra d1,..
  3061.      ..Hello:
  3062.       dbra d1,..Hello
  3063.  
  3064. The local numerical label
  3065. -------------------------
  3066.  
  3067.    Addionally to the non-numerical local label there are also the
  3068. numerical labels which are based of 4 digits with the postfix $.  BASM
  3069. handles the number as a hash key with the consequence that there's no
  3070. difference between 001$ and 1$.
  3071.  
  3072.  
  3073.  
  3074.      label_0:
  3075.      123$:    nop
  3076.      label_1:
  3077.      123$:    nop
  3078.  
  3079. The absolute Symbol
  3080. -------------------
  3081.  
  3082.    The absolute symbol is defined by a direct value initializing that
  3083. is initiated by =, equ or set.  If you define a symbol by set you can
  3084. change it as often as needed.
  3085.  
  3086.  
  3087.  
  3088.      value1=2
  3089.      value2 equ value1*2
  3090.      value3 set value2
  3091.  
  3092. The Register Symbol
  3093. -------------------
  3094.  
  3095.    The register symbol is defined by `equr' or `fequr' that is used for
  3096. FPU registers.
  3097.  
  3098.  
  3099.  
  3100.      Ptr    equr    a1
  3101.      PI    fequr    fp2
  3102.       move.l   (Ptr),d0   ;move.l  (a1),d0
  3103.       fmove.x  PI,fp0     ;fmove.x fp2,fp0
  3104.  
  3105. The Register List Symbol
  3106. ------------------------
  3107.  
  3108.    The register list symbol is defined by `reg' and represents the
  3109. register mask for `Movem' and `fmovem'.  You must not mix FPU and
  3110. Integer registers with each other in a register list.
  3111.  
  3112.  
  3113.      mask    reg    d0/d2/d4-d7/a0-a4/a6-a7
  3114.      mask1    reg    d0-a6
  3115.      mask2    reg    d0-6
  3116.      fmask    reg    fp0-fp2/fp4-fp5
  3117.  
  3118. The Macro Symbol
  3119. ----------------
  3120.  
  3121.    By using the command `macro' or `cmacro' after the symbol, the
  3122. symbol is defined as a macro.  The macro block is terminated by the
  3123. command endm.  The Macro cmacro is case-insensitive and therefore
  3124. useful to emulate commands that are missing from the core.
  3125.  
  3126.  
  3127.  
  3128.  
  3129.      Symbol[:] macro
  3130.      .
  3131.      .
  3132.      Symbol[:] endm
  3133.  
  3134. Datatypes
  3135. ---------
  3136.  
  3137.    The assembler understands 3 distinct datatypes.
  3138.  
  3139.    * 32Bit Integer
  3140.  
  3141.    * 96Bit Extended Floating Point
  3142.  
  3143.    * 96Bit Packed Binary Floating Point
  3144.  
  3145.    At the moment only integer datatypes are supported in arithmetic
  3146. arguments so you can only use the FPU datatypes as constants.
  3147.  
  3148.      +-------------+--------------------+
  3149.      | Format      | Representation     |
  3150.      +-------------+--------------------+
  3151.      +-------------+--------------------+
  3152.      | Decimal     | 1024               |
  3153.      +-------------+--------------------+
  3154.      | Hexadecimal | $400               |
  3155.      +-------------+--------------------+
  3156.      | Binary      | %10000000000       |
  3157.      +-------------+--------------------+
  3158.      | Ascii       | "OK", 'OK' or `OK` |
  3159.      +-------------+--------------------+
  3160.  
  3161.    Furthermore you can use symbols or the character `*' that represents
  3162. the program counter in arguments.  There are limitation in the use of
  3163. symbols in arguments.  For example you can only add or subtract
  3164. constants from an external label, Floatingpoint Values can only be used
  3165. as simple constants,...  By the postfix `k' after decimal value the
  3166. value is multply by $1000.
  3167.  
  3168.                         `Floating Point Format'
  3169.  
  3170.      +-------------+-------------------------------------+
  3171.      | Format      | Representation                      |
  3172.      +-------------+-------------------------------------+
  3173.      +-------------+-------------------------------------+
  3174.      | Extended    | '[+,-]3. 145637848298628[e[+,-]123] |
  3175.      +-------------+-------------------------------------+
  3176.      | Packed      | ''[+,-]3. 145637848298628[e[+,-]123]|
  3177.      +-------------+-------------------------------------+
  3178.  
  3179. Datatype Conversion
  3180. -------------------
  3181.  
  3182.    All commands are performed with these 3 datatypes and then converted
  3183. into the required datatype.  For example a 32Bit integer can be
  3184. converted into 16Bit and 8 Bit; an extended floating point into a
  3185. double or single floating point.  Floating point datatypes are rounded
  3186. by a convertation.  If a rouding error occurs the parser returns with
  3187. an error.
  3188.  
  3189. Datatype Format
  3190. ---------------
  3191.  
  3192.                       Internal Datatype Structure
  3193.  
  3194.    * Integer
  3195.  
  3196.      +--------+---------+
  3197.      | Bit 31 | 30..0   |
  3198.      +--------+---------+
  3199.      +--------+---------+
  3200.      |    S   | Integer |
  3201.      +--------+---------+
  3202.  
  3203.    * Single Floating Point
  3204.  
  3205.      +--------+-----------------+------------+
  3206.      | Bit 31 | Bits 30..23     | Bits 22..0 |
  3207.      +--------+-----------------+------------+
  3208.      +--------+-----------------+------------+
  3209.      |  Sign  | Biased Exponent |  Fraction  |
  3210.      +--------+-----------------+------------+
  3211.  
  3212.    * Double Floating Point
  3213.  
  3214.      +--------+-----------------+------------+
  3215.      | Bit 63 | Bits 62..52     | Bits 51..0 |
  3216.      +--------+-----------------+------------+
  3217.      +--------+-----------------+------------+
  3218.      |  Sign  | Biased Exponent |  Fraction  |
  3219.      +--------+-----------------+------------+
  3220.  
  3221.    * Extended Floating Point
  3222.  
  3223.      +--------+-----------------+------------+
  3224.      | Bit 95 | Bits 94..80     | Bits 62..0 |
  3225.      +--------+-----------------+------------+
  3226.      +--------+-----------------+------------+
  3227.      |  Sign  | Biased Exponent |  Mantisse  |
  3228.      +--------+-----------------+------------+
  3229.  
  3230.    * Packed Binary Floating Point
  3231.  
  3232.      +------+------+------+------+------+------+------+------+
  3233.      | MEYY | EXP2 | EXP1 | EXP0 | EXP3 | 0000 | 0000 | M016 |
  3234.      +------+------+------+------+------+------+------+------+
  3235.      | M015 | M014 | M013 | M012 | M011 | M010 | M009 | M008 |
  3236.      +------+------+------+------+------+------+------+------+
  3237.      | M007 | M006 | M005 | M004 | M003 | M002 | M001 | M000 |
  3238.      +------+------+------+------+------+------+------+------+
  3239.  
  3240.    * M is the sign (+ or -) of the fraction
  3241.  
  3242.    * E is the sign (+ or -) of the exponent
  3243.  
  3244.    * Y are the internal flags for infinity and NAN
  3245.  
  3246.    * E002-000 are the numbers of the exponent from 2 to 0, EXP3 is used
  3247.      internally.
  3248.  
  3249.    * M016-000 are the numbers of the fraction from 16 to 0. Each number
  3250.      lies in the range from 0 to 9..
  3251.  
  3252. Operations
  3253. ----------
  3254.  
  3255. Operators
  3256. ---------
  3257.  
  3258.      +----------+-------------------------------+
  3259.      | Operator | Function                      |
  3260.      +----------+-------------------------------+
  3261.      +----------+-------------------------------+
  3262.      |   `+'    | 32Bit signed Addition         |
  3263.      +----------+-------------------------------+
  3264.      |   `-'    | 32Bit signed Subtraction      |
  3265.      +----------+-------------------------------+
  3266.      |   `*'    | 32Bit signed Multiplication   |
  3267.      +----------+-------------------------------+
  3268.      |   `/'    | 32Bit signed Division         |
  3269.      +----------+-------------------------------+
  3270.      |   '|'    | 32Bit Or                      |
  3271.      +----------+-------------------------------+
  3272.      |   `!'    | 32Bit Or                      |
  3273.      +----------+-------------------------------+
  3274.      |   `&'    | 32Bit And                     |
  3275.      +----------+-------------------------------+
  3276.      |   `^'    | 32Bit Eor                     |
  3277.      +----------+-------------------------------+
  3278.      |   `<<'   | logic 32Bit Shift to the left |
  3279.      +----------+-------------------------------+
  3280.      |   `>>'   | logic 32Bit Shift to the right|
  3281.      +----------+-------------------------------+
  3282.      |   `~'    | 32Bit Not                     |
  3283.      +----------+-------------------------------+
  3284.  
  3285.      Basm cares for the operator priorities but be careful while
  3286.      porting Seka Sources because Seka doesn't care for the priorities.
  3287.  
  3288. Functions
  3289. ---------
  3290.  
  3291.    The following functions are supported.
  3292.  
  3293.    * _bitnum(Argument) calculates the bit number of the argument. If
  3294.      this is impossible an error occurs.
  3295.  
  3296.    * _bitfield(Argument) calculates the bit mask of the argument. If
  3297.      this is impossible an error occurs.
  3298.  
  3299.    * _extb(Argument) equal to the 680xx command extb
  3300.  
  3301.    * _extw(Argument) equal to the 680xx command extw
  3302.  
  3303.    * _min(Argument[,Argument,...]) calculate the minimum of the
  3304.      argument.
  3305.  
  3306.    * _max(Argument[,Argument,...]) calculate the maximum of the
  3307.      argument.
  3308.  
  3309. Assembler Commands
  3310. ==================
  3311.  
  3312. Hunk/Link Commands
  3313. ------------------
  3314.  
  3315. [Label] section Name[,Typ[,[RelocModus,Memtyp]
  3316. ..............................................
  3317.  
  3318.    defines a new logical unit so that the DOS-Loader has the
  3319. opportuntity to place smaller hunks into free memory blocks.  Another
  3320. use for this command is to set different memory types for the hunk to
  3321. load gfx data into the chipmem.  If you don't specify the section type
  3322. it assumes "",Code,Public.
  3323.  
  3324.    * Name = Hunkname
  3325.  
  3326.    * Hunk type
  3327.  
  3328.     `CODE'
  3329.           starts a code segment.
  3330.  
  3331.     `DATA'
  3332.           starts a data segment.
  3333.  
  3334.     `BSS'
  3335.           starts an undefined data segment.
  3336.  
  3337.     `DEBUG'
  3338.           starts a custom debug segment.
  3339.  
  3340.     `CUSTOM'
  3341.           starts a Custom-Hunk area.
  3342.  
  3343.    * Reloc-Mode defines the width of the hunk relocation. Default 32Bit
  3344.  
  3345.     `RELOC16'
  3346.           sets the reloc width to 16bit.(V37)
  3347.  
  3348.     `RELOC32'
  3349.           sets the reloc width to 32bit.(Default)
  3350.  
  3351.    * Memtype defines the memory attributes of the hunk.  If you add a
  3352.      `_p', `_c', or `_f' upon the type parameter, you cannot use more
  3353.      memtypes.The memtype `DEBUG' does not allow memory attribute
  3354.      suffixes.
  3355.  
  3356.     `PUBLIC'
  3357.           loads the hunk into the memory with the highest priority.
  3358.           Code Suffix _p.
  3359.  
  3360.     `CHIP'
  3361.           loads the hunk into chip memory. Code Suffix _c.
  3362.  
  3363.     `FAST'
  3364.           loads the hunk into fast memory. Code Suffix _f.
  3365.  
  3366.     `ADVISORY'
  3367.           ignores the hunk if the OS doesn't understand the type. A
  3368.           kind of Debug-Hunk that can be used by the OS.(V39)
  3369.  
  3370.     `ATTR=?'
  3371.           loads the hunk into the memory with specified memory
  3372.           attributs. (V37)
  3373.  
  3374. [Label] code [Name[, Memtyp]]
  3375. .............................
  3376.  
  3377.    defines a new code hunk and is equivalent to the command `section
  3378. ?,code,?'.
  3379.  
  3380.    * Name = Hunkname
  3381.  
  3382.    * Memtype defines the memory attributes for the hunk.
  3383.  
  3384.     `PUBLIC'
  3385.           loads the hunk into the memory with the highest priority.
  3386.           Code Suffix _p.
  3387.  
  3388.     `CHIP'
  3389.           loads the hunk into chip memory. Code Suffix _c.
  3390.  
  3391.     `FAST'
  3392.           loads the hunk into fast memory. Code Suffix _f.
  3393.  
  3394.     `ADVISORY'
  3395.           ignores the hunk if the OS doesn't understand the type. A
  3396.           kind of Debug-Hunk that can be used by the OS.(V39)
  3397.  
  3398.     `ATTR=?'
  3399.           loads the hunk into the memory with specified memory
  3400.           attributs. (V37)
  3401.  
  3402. [Label] data [Name[, Memtyp]]
  3403. .............................
  3404.  
  3405.    defines a new data hunk and is equivalent to the command `section
  3406. ?,data,?'.
  3407.  
  3408.    * Name = Hunkname
  3409.  
  3410.    * Memtype defines the memory attributes for the hunk.
  3411.  
  3412.     `PUBLIC'
  3413.           loads the hunk into the memory with the highest priority.
  3414.           Code Suffix _p.
  3415.  
  3416.     `CHIP'
  3417.           loads the hunk into chip memory. Code Suffix _c.
  3418.  
  3419.     `FAST'
  3420.           loads the hunk into fast memory. Code Suffix _f.
  3421.  
  3422.     `ADVISORY'
  3423.           ignores the hunk if the OS doesn't understand the type. A
  3424.           kind of Debug-Hunk that can be used by the OS.(V39)
  3425.  
  3426.     `ATTR=?'
  3427.           loads the hunk into the memory with specified memory
  3428.           attributs. (V37)
  3429.  
  3430. [Label] bss [Name[, Memtyp]]
  3431. ............................
  3432.  
  3433.    defines a new BSS hunk and is equivalent to the command `section
  3434. ?,bss,?'.
  3435.  
  3436.    * Name = Hunkname
  3437.  
  3438.    * Memtype defines the memory attributes for the hunk.
  3439.  
  3440.     `PUBLIC'
  3441.           loads the hunk into the memory with the highest priority.
  3442.           Code Suffix _p.
  3443.  
  3444.     `CHIP'
  3445.           loads the hunk into chip memory. Code Suffix _c.
  3446.  
  3447.     `FAST'
  3448.           loads the hunk into fast memory. Code Suffix _f.
  3449.  
  3450.     `ADVISORY'
  3451.           ignores the hunk if the OS doesn't understand the type. A
  3452.           kind of Debug-Hunk that can be used by the OS.(V39)
  3453.  
  3454.     `ATTR=?'
  3455.           loads the hunk into the memory with specified memory
  3456.           attributs. (V37)
  3457.  
  3458. [Label] cseg [Name[, Memtyp]]
  3459. .............................
  3460.  
  3461.    has the same function as the command `code'.
  3462.  
  3463. [Label] dseg [Name[, Memtyp]]
  3464. .............................
  3465.  
  3466.    has the same function as the command `data'.
  3467.  
  3468. idnt Name
  3469. .........
  3470.  
  3471.    defines the name of the `HUNK_UNIT' hunk in the object file.
  3472.  
  3473.    * Name = Hunkname
  3474.  
  3475. identify Name
  3476. .............
  3477.  
  3478.    defines the name of the actual hunk.
  3479.  
  3480.    * Name = Hunkname
  3481.  
  3482. BDebugArg Argument
  3483. ..................
  3484.  
  3485.    defines a parameter in env:BDebugProgram. It doesn't active this
  3486. function you have to activate by option "-J" in *Note BOPT: MI_BOPT.
  3487.  
  3488.    * Argument = Argument Text
  3489.  
  3490. smalldata [Register]
  3491. ....................
  3492.  
  3493.    activates the smalldata mode for the hunk.  Optionally, you can also
  3494. define the smalldata register.  Default register is `A4'.  The program
  3495. itself must initialize the smalldata register with the address of the
  3496. smalldata data hunk.
  3497.  
  3498.  
  3499.  
  3500.       bopt    w2-            ;68020 Addressmode warnings off
  3501.       mc68020            ;68020 mode activated
  3502.      
  3503.       smalldata    a3        ;Default is A4!!!
  3504.       xref    _LinkerDB        ;Special linker symbol
  3505.      
  3506.       lea.l    _LinkerDB,a3        ;Address of the smalldata data segments
  3507.       move.l    #0,(d_test.l,a3)
  3508.       move.l    #"TEST",d_test(a3)
  3509.       moveq    #0,d0
  3510.       tst.b    array(a3,d0.w)
  3511.       rts
  3512.      
  3513.       section    "__MERGED",BSS    ;The smalldata data segments are defined
  3514.                                      ;the following way
  3515.      d_test:
  3516.       ds.l    1
  3517.      array:
  3518.       ds.b    20
  3519.  
  3520. xref Symbol[, Symbol...]
  3521. ........................
  3522.  
  3523.    imports a symbol so that you can access symbols that were exported
  3524. by XDef.  The linker resolves these reference during the link process
  3525. and creates a program file.  If the assembler finds a XRef in the source
  3526. it creates an object file. This decision can be overruled.
  3527.  
  3528.    * Symbol = Name of the importet symbol.
  3529.  
  3530. xdef Symbol[, Symbol...]
  3531. ........................
  3532.  
  3533.    exports a symbol as global so that other object files can import the
  3534. symbol by XRef.  There's no need to define a symbol before you mark them
  3535. with XDef. If the assembler finds a XRef in the source it creates an
  3536. object file. This decision can be overruled.
  3537.  
  3538.    * Symbol = Name of the global symbol
  3539.  
  3540. global Symbol[, Symbol...]
  3541. ..........................
  3542.  
  3543.    has the same function like XDef.
  3544.  
  3545. public Symbol[, Symbol...]
  3546. ..........................
  3547.  
  3548.    has the same function like XDef.
  3549.  
  3550. output Name
  3551. ...........
  3552.  
  3553.    sets an output filename.  If you don't specify a filename the
  3554. assembler uses the source filename and adds the appropriate filetype
  3555. suffix.
  3556.  
  3557.    * Name = Filename
  3558.  
  3559. objfile
  3560. .......
  3561.  
  3562.    has the same function like Output.
  3563.  
  3564. exeobj
  3565. ......
  3566.  
  3567.    writes a program file if you wanna overrule the assembler.
  3568.  
  3569. linkobj
  3570. .......
  3571.  
  3572.    writes an object file if you wanna overrule the assembler.
  3573.  
  3574. org Address
  3575. ...........
  3576.  
  3577.    activates the absolute mode.  All command that refer to hunk related
  3578. functions aren't allowed.  For example:. section, xdef, xref.  The
  3579. parameter address sets the base address of the created code.
  3580.  
  3581.    * Address = Absolute Address
  3582.  
  3583. addsym
  3584. ......
  3585.  
  3586.    writes a symbol hunk.
  3587.  
  3588. debug
  3589. .....
  3590.  
  3591.    writes a SAS D1 debug hunk to see  source level informations while
  3592. debugging the program through bdebug.
  3593.  
  3594. Symbol Commands
  3595. ---------------
  3596.  
  3597. CArgs [#Offset,]Symbol[,Symbol.w[,Symbol.l]
  3598. ...........................................
  3599.  
  3600.    defines the symbol offsets for a stack function. The first Symbol
  3601. starts with the offset 4 but if you like to use a different Offset it's
  3602. possible to specify one.  Then the offset is increased according to the
  3603. size of the symbol. If the symbol has no size specifier the default size
  3604. is word. Sorry..i would use a longword here but to be compatible with
  3605. Devpac i'm forced to use word.
  3606.  
  3607.       cargs Test1.w,Test2.l
  3608.       move.w    Test1(a7),d0    ;Test1=4
  3609.       move.l    Test2(a7),d0    ;Test2=4+2=6
  3610.  
  3611. Symbol rs[.width] Count
  3612. .......................
  3613.  
  3614.    initializes the Symbol with the value of the counter __RS and
  3615. increases the __RS counter afterwards by Count*Width.  You can use this
  3616. command as a replacement for the include exec/types.i macros to
  3617. increase the parsing speed.
  3618.  
  3619.    * Width
  3620.  
  3621.     `B'
  3622.           1 Byte Valuearea: -$80 <= x < $100
  3623.  
  3624.     `W'
  3625.           2 Bytes Valuearea: -$8000 <= x < $10000
  3626.  
  3627.     `L'
  3628.           4 Bytes Valuearea: -$80000000 <= x < $10000000
  3629.  
  3630.     `S'
  3631.           4 Bytes (Single IEEE-Float)
  3632.  
  3633.     `D'
  3634.           8 Bytes (Double IEEE-Float)
  3635.  
  3636.     `X'
  3637.           12 Bytes (Extended IEEE-Float)
  3638.  
  3639.     `P'
  3640.           12 Bytes (Packed BCD-Float)
  3641.  
  3642.     `Q'
  3643.           16 Bytes (Quadword)
  3644.  
  3645. Symbol so[.width] Count
  3646. .......................
  3647.  
  3648.    This command has the same function like rs with the exception that
  3649. the Symbol __SO is used instead of the __RS symbol.  Internally both
  3650. symbols are handled equal.  Devpac has introduced the symbol __RS and
  3651. Macro68k knows the functionality by the name __SO.
  3652.  
  3653. Symbol fo[.width] Count
  3654. .......................
  3655.  
  3656.    decreases the counter __FO by Count*Width and initializes the Symbol
  3657. with the new value.  Useful to create the negative local stackframe
  3658. symbols needed by link.
  3659.  
  3660.    * Width
  3661.  
  3662.     `B'
  3663.           1 Byte Valuearea: -$80 <= x < $100
  3664.  
  3665.     `W'
  3666.           2 Bytes Valuearea: -$8000 <= x < $10000
  3667.  
  3668.     `L'
  3669.           4 Bytes Valuearea: -$80000000 <= x < $10000000
  3670.  
  3671.     `S'
  3672.           4 Bytes (Single IEEE-Float)
  3673.  
  3674.     `D'
  3675.           8 Bytes (Double IEEE-Float)
  3676.  
  3677.     `X'
  3678.           12 Bytes (Extended IEEE-Float)
  3679.  
  3680.     `P'
  3681.           12 Bytes (Packed BCD-Float)
  3682.  
  3683.     `Q'
  3684.           16 Bytes (Quadword)
  3685.  
  3686. rsreset
  3687. .......
  3688.  
  3689.    initializes the counter __RS to 0.
  3690.  
  3691. rsset Value
  3692. ...........
  3693.  
  3694.    initializes the counter __RS with the Value
  3695.  
  3696.    * Value = New Index
  3697.  
  3698. clrso
  3699. .....
  3700.  
  3701.    has the same function like rsreset
  3702.  
  3703. clrfo
  3704. .....
  3705.  
  3706.    has the same function like foreset.
  3707.  
  3708. setso Value
  3709. ...........
  3710.  
  3711.    has the same function like rsset
  3712.  
  3713. setrs Value
  3714. ...........
  3715.  
  3716.    has the same function like rsset
  3717.  
  3718. setfo Value
  3719. ...........
  3720.  
  3721.    initializes the counter __FO with the Value
  3722.  
  3723.    * Value = New Index
  3724.  
  3725. Symbol rsval
  3726. ............
  3727.  
  3728.    initializes the Symbol with the value of the __RS counter.
  3729.  
  3730. Symbol soval
  3731. ............
  3732.  
  3733.    has the same function like rsval.
  3734.  
  3735. Symbol foval
  3736. ............
  3737.  
  3738.    initializes the Symbol with the value of the __FO counter.
  3739.  
  3740. Data Commands
  3741. -------------
  3742.  
  3743. align Value
  3744. ...........
  3745.  
  3746.    aligns the program counter to an address that can be devided by the
  3747. value.  Useful because certain DOS structures have to be aligned on 4
  3748. Byte boundaries. For example FileInfoBlock.  Furthermore it's also
  3749. useful to align subroutines on longword boundaries that they fit better
  3750. into the cache structure.
  3751.  
  3752.    * Value = Align Mask
  3753.  
  3754. cnop Offset,Align
  3755. .................
  3756.  
  3757.    aligns the program counter to an address that can be devided by the
  3758. Align value and adds the value onto the address.  Internally only Align
  3759. values < 16 are supported.
  3760.  
  3761. pad.Width Align[,Value]
  3762. .......................
  3763.  
  3764.    aligns the program counter to an address that can be devided by the
  3765. Align*Width and fills the aligned area by the optional mask value.
  3766.  
  3767. quad
  3768. ....
  3769.  
  3770.    aligns the program counter to a 16 Byte address.
  3771.  
  3772. even
  3773. ....
  3774.  
  3775.    aligns the program counter to an even address.  This function is
  3776. useful if you define an odd sized data area and you need a word aligned
  3777. for OS data structures or assembler instructions.
  3778.  
  3779. odd
  3780. ...
  3781.  
  3782.    aligns the program counter to an odd address.
  3783.  
  3784. dc[.width] Value[,Value...]
  3785. ...........................
  3786.  
  3787.    inserts data of the Width into the code.
  3788.  
  3789.    * Width
  3790.  
  3791.     `B'
  3792.           1 Byte Valuearea: -$80 <= x < $100
  3793.  
  3794.     `W'
  3795.           2 Bytes Valuearea: -$8000 <= x < $10000
  3796.  
  3797.     `L'
  3798.           4 Bytes Valuearea: -$80000000 <= x < $10000000
  3799.  
  3800.     `S'
  3801.           4 Bytes (Single IEEE-Float)
  3802.  
  3803.     `D'
  3804.           8 Bytes (Double IEEE-Float)
  3805.  
  3806.     `X'
  3807.           12 Bytes (Extended IEEE-Float)
  3808.  
  3809.     `P'
  3810.           12 Bytes (Packed BCD-Float)
  3811.  
  3812. db Value[,Value,...]
  3813. ....................
  3814.  
  3815.    inserts a byte with a value in the valuearea -$80 <= x < $100.
  3816.  
  3817. dw Value[,Value,...]
  3818. ....................
  3819.  
  3820.    inserts a word with a value in the valuearea -$8000 <= x < $10000.
  3821.  
  3822. dl Value[,Value,...]
  3823. ....................
  3824.  
  3825.    inserts a longword with a value in the valuearea -$80000000 <= x <
  3826. $100000000.
  3827.  
  3828. ub Value[,Value,...]
  3829. ....................
  3830.  
  3831.    inserts a byte with a value in the valuearea -$80 <= x < $80.
  3832.  
  3833. uw Value[,Value,...]
  3834. ....................
  3835.  
  3836.    inserts a word with a value in the valuearea -$8000 <= x < $8000.
  3837.  
  3838. ul Value[,Value,...]
  3839. ....................
  3840.  
  3841.    inserts a longword with a value in the valuearea -$80000000 <= x <
  3842. $80000000.
  3843.  
  3844. sb Value[,Value,...]
  3845. ....................
  3846.  
  3847.    inserts a byte with a value in the valuearea -$80 <= x < $100.
  3848.  
  3849. sw Value[,Value,...]
  3850. ....................
  3851.  
  3852.    inserts a word with a value in the valuearea -$8000 <= x < $10000.
  3853.  
  3854. sl Value[,Value,...]
  3855. ....................
  3856.  
  3857.    inserts a longword with a value in the valuearea -$80000000 <= x <
  3858. $100000000.
  3859.  
  3860. pb Value[,Value,...]
  3861. ....................
  3862.  
  3863.    inserts a byte with a value in the valuearea 0 <= x < $80.
  3864.  
  3865. pw Value[,Value,...]
  3866. ....................
  3867.  
  3868.    inserts a word with a value in the valuearea 0 <= x < $8000.
  3869.  
  3870. pl Value[,Value,...]
  3871. ....................
  3872.  
  3873.    inserts a longword with a value in the valuearea 0 <= x < $80000000.
  3874.  
  3875. nb Value[,Value,...]
  3876. ....................
  3877.  
  3878.    inserts a byte with a value in the valuearea -$80 <= x < 0.
  3879.  
  3880. nw Value[,Value,...]
  3881. ....................
  3882.  
  3883.    inserts a word with a value in the valuearea -$8000 <= x < 0.
  3884.  
  3885. nl Value[,Value,...]
  3886. ....................
  3887.  
  3888.    inserts a longword with a value in the valuearea -$80000000 <= x < 0.
  3889.  
  3890. ds[.width] Count[,Value]
  3891. ........................
  3892.  
  3893.    defines a memory area with the length Count * Width and fills the
  3894. area with an optional Value.  Default fill value is 0.  Is the Count 0
  3895. a cnop 0,Width is run.
  3896.  
  3897.    * Width
  3898.  
  3899.     `B'
  3900.           1 Byte Valuearea: -$80 <= x < $100
  3901.  
  3902.     `W'
  3903.           2 Bytes Valuearea: -$8000 <= x < $10000
  3904.  
  3905.     `L'
  3906.           4 Bytes Valuearea: -$80000000 <= x < $10000000
  3907.  
  3908.     `S'
  3909.           4 Bytes (Single IEEE-Float)
  3910.  
  3911.     `D'
  3912.           8 Bytes (Double IEEE-Float)
  3913.  
  3914.     `X'
  3915.           12 Bytes (Extended IEEE-Float)
  3916.  
  3917.     `P'
  3918.           12 Bytes (Packed BCD-Float)
  3919.  
  3920.    * Count = Length of the memory area.
  3921.  
  3922.    * Value = optional Fill Value.
  3923.  
  3924. dsb[.width] Count[,Value]
  3925. .........................
  3926.  
  3927.    has the same function like ds
  3928.  
  3929. dsb[.width] Count[,Value]
  3930. .........................
  3931.  
  3932.    has the same function like ds
  3933.  
  3934. blk[.width] Count[,Value...]
  3935. ............................
  3936.  
  3937.    has the same function like ds
  3938.  
  3939. ascii String1[,String2,...]
  3940. ...........................
  3941.  
  3942.    inserts Strings.
  3943.  
  3944. cstring String1[,String2,...]
  3945. .............................
  3946.  
  3947.    inserts C-Strings.
  3948.  
  3949. dstring dtype1,dtype2,dtype3
  3950. ............................
  3951.  
  3952.    inserts the current date string.
  3953.  
  3954.                               Datentypen
  3955.  
  3956.    * "w" WeekDay
  3957.  
  3958.    * "d" Date
  3959.  
  3960.    * "t" Time
  3961.  
  3962.  
  3963.       dc.b    " ("
  3964.       dstring    w,d,t
  3965.       dc.b    ")"
  3966.       dc.b    $a,$d,0
  3967.      ;=> (Thursday 14-Okt-93 15:32:06)
  3968.  
  3969. pstring String[,String,...]
  3970. ...........................
  3971.  
  3972.    inserts a BCPL string.
  3973.  
  3974. istring String[,String,...]
  3975. ...........................
  3976.  
  3977.    inserts strings that terminate with a char that has Bit 7 set.
  3978.  
  3979. bitstream Mask
  3980. ..............
  3981.  
  3982.    inserts a bitmask for an image object for example.  The bits are
  3983. aligned to bytes.
  3984.  
  3985.    * Mask =  Mask is a string that is based only of 0 and 1.
  3986.  
  3987.  
  3988.       bitstream "01001000001"
  3989.  
  3990. sprintx "Formatstring"[,Value[,...]]
  3991. ....................................
  3992.  
  3993.    inserts the resulting string into the code.  The string isn't
  3994. terminated by a 0 so that you can add other strings rather easy.
  3995.  
  3996.    * FormatString - is a string in C-Notation so you can
  3997.            use the known C char types n,t,...
  3998.      The following options are allowed.
  3999.  
  4000.    * FormatSyntax - %[flags][width][.limit][length]type
  4001.  
  4002.         * flags - '-' disactivates left side layout.
  4003.  
  4004.         * width - Field Length. If the first char is '0' the field is
  4005.           filled by '0' on the left side.
  4006.  
  4007.         * limit - defines the maximal count of char that can be inserted
  4008.           from a string. Only legal for %s and %b.
  4009.  
  4010.         * length - The size of the datatype. Default is 16-bit for the
  4011.           typs %d,%u and %x. %l is long (32Bit). Attention! The
  4012.           Assembler always pushes a longword on the stack so always use
  4013.           %l if you don't know what you're doing.
  4014.  
  4015.         * type - The following types are supported.
  4016.  
  4017.           b - BSTR, a 32-bit BPTR Pointer on a bytelength     string.
  4018.             A NULL BPTR is handled like an empty string.  d - signed
  4019.           decimal u - unsigned decimal x - hexadezimal in lower case.
  4020.           X - hexadecimal in upper case.  s - String, a 32-bit Pointer
  4021.           on a     NULL-terminated Byte-String.      A NULL BPTR is
  4022.           handled like an empty string.  c - Char
  4023.  
  4024.    * Value - is an argument that has to be resolvable.
  4025.  
  4026. Listing I/O Commands
  4027. --------------------
  4028.  
  4029. list
  4030. ....
  4031.  
  4032.    activates the listing output. Has no function if the global listing
  4033. output wasn't activated.
  4034.  
  4035.                             Listing Format:
  4036.  
  4037.             LINE ADDRESS[Flag1] COMMAND-BYTES[Flag2] SOURCE
  4038.  
  4039.    * Flag1
  4040.  
  4041.         * + shows that the line was created by a macro.
  4042.  
  4043.         * > shows that the Assembler searches the closing ENDC.
  4044.  
  4045.         * < shows that the Assembler searches the closing ENDM.
  4046.  
  4047.    * Flag2
  4048.  
  4049.         * + shows a line overflow and that Bytes are ignored.  Can
  4050.           often happen during data definitions.
  4051.  
  4052. nolist
  4053. ......
  4054.  
  4055.    disactivates the listing output. Has no function if the global
  4056. listing output wasn't activated.
  4057.  
  4058. printx "Formatstring"[,Value[,...]]
  4059. ...................................
  4060.  
  4061.    outputs the string to the current Stdout and works simular as the
  4062. known C-Printf function. Look at SPRINTF
  4063.  
  4064. errfile Name
  4065. ............
  4066.  
  4067.    defines the filename for the error output.
  4068.  
  4069.    * Name = Filename
  4070.  
  4071. lisfile Name
  4072. ............
  4073.  
  4074.    defines the filename for the listing output.  If no error file was
  4075. defined the error output is also written into the listing file.
  4076.  
  4077.    * Name = Filename
  4078.  
  4079. Structuring
  4080. -----------
  4081.  
  4082. symbol[:] macro
  4083. ...............
  4084.  
  4085.    starts a Macro block.
  4086.  
  4087. endm
  4088. ....
  4089.  
  4090.    ends a macroblock.
  4091.  
  4092. mexit
  4093. .....
  4094.  
  4095.    ends a macro call.
  4096.  
  4097. fail
  4098. ....
  4099.  
  4100.    creates an error.
  4101.  
  4102. end
  4103. ...
  4104.  
  4105.    ends the assembling.
  4106.  
  4107. if Symbol
  4108. .........
  4109.  
  4110.    checks if the symbol value is not NULL and assembles the block
  4111. depending on the success.
  4112.  
  4113. ifd Symbol
  4114. ..........
  4115.  
  4116.    checks if the Symbol exists and assembles the block depending on the
  4117. success.
  4118.  
  4119. ifnd Symbol
  4120. ...........
  4121.  
  4122.    checks if the Symbol doesn't exist and assembles the block depending
  4123. on the success.
  4124.  
  4125. ifv String
  4126. ..........
  4127.  
  4128.    This is a privat command that is used for internal functionality and
  4129. subject to change. Touch an burn!
  4130.  
  4131. ifnv String
  4132. ...........
  4133.  
  4134.    This is a privat command that is used for internal functionality and
  4135. subject to change. Touch an burn!
  4136.  
  4137. ifmacrod Macro
  4138. ..............
  4139.  
  4140.    checks if the Macro exists and assembles the block depending on the
  4141. success.
  4142.  
  4143. ifmacrond Macro
  4144. ...............
  4145.  
  4146.    checks if the Macro doesn't exist and assembles the block depending
  4147. on the success.
  4148.  
  4149. ifcmacrod CMacro
  4150. ................
  4151.  
  4152.    checks if the CMacro exists and assembles the block depending on the
  4153. success.
  4154.  
  4155. ifcmacrond CMacro
  4156. .................
  4157.  
  4158.    checks if the CMacro doesn't exist and assembles the block depending
  4159. on the success.
  4160.  
  4161. ifc Symbol,Symbol
  4162. .................
  4163.  
  4164.    compares the first string with the second string and if they are
  4165. equal the block is assembled.
  4166.  
  4167. ifnc 'String','String'
  4168. ......................
  4169.  
  4170.    compares the first string with the second string and if they differ
  4171. the block is assembled.
  4172.  
  4173. if[condition] Symbol=Symbol
  4174. ...........................
  4175.  
  4176.    compares the first symbol with the second symbol and decides
  4177. according to the condition if the block is assembled.
  4178.  
  4179.    * Condition = Normal Bcc-Condition Syntax
  4180.  
  4181.    * Symbol = Normal Symbol
  4182.  
  4183. else
  4184. ....
  4185.  
  4186.    activates the condition block if the block above wasn't assembled.
  4187.  
  4188. elseif
  4189. ......
  4190.  
  4191.    activates the condition block if the block above wasn't assembled.
  4192.  
  4193. endc
  4194. ....
  4195.  
  4196.    defines the end of a condition block.
  4197.  
  4198. endif
  4199. .....
  4200.  
  4201.    defines the end of a condition block.
  4202.  
  4203. repeat Count
  4204. ............
  4205.  
  4206.    repeats the blocks that is located between repeat and endr by the
  4207. number Count.
  4208.  
  4209. rept Count
  4210. ..........
  4211.  
  4212.    has the same function like Repeat
  4213.  
  4214. procstart
  4215. .........
  4216.  
  4217.    defines a function in a Dice-C assembler output and is used to
  4218. optimize Link and Unlk.  This optimize method isn't working yet.
  4219.  
  4220. procend
  4221. .......
  4222.  
  4223.    defines a function in a Dice-C assembler output and is used to
  4224. optimize Link and Unlk.  This optimize method isn't working yet.
  4225.  
  4226. File I/O Commands
  4227. -----------------
  4228.  
  4229. incdir Dir[,Dir[,...]]
  4230. ......................
  4231.  
  4232.    adds directories to the include path list.  BASM uses 2 internal
  4233. path lists and the current directory to find the include and incbin
  4234. files.  First BASM checks for a : character in the filename and if it
  4235. finds a volume the file is loaded direct instead of searching it
  4236. through the pathlists.  The first path list contains the paths that
  4237. were defined in the commandline or *Note BOPT: MI_BOPT by the option -i
  4238. or through incdir.  The second path list contains the paths that were
  4239. defined in global configuration file ENV:BASMOption.  The entries of
  4240. the second list will be removed when the assembler is closed so that
  4241. the paths are still correct in the ARexx-Mode.  The first list is
  4242. removed every pass.
  4243.  
  4244.    * Dir = Name of the Include-Path.
  4245.  
  4246. Incpath
  4247. .......
  4248.  
  4249.    has the same function like incdir.
  4250.  
  4251. include Name
  4252. ............
  4253.  
  4254.    loads the external include file, for example the OS-Includes.  If
  4255. the file is a precompiled include file it's detected automaticly.
  4256. Includes are loaded from the editor or cachefile.library.
  4257.  
  4258.    * Name = Filename
  4259.  
  4260. include2 Name
  4261. .............
  4262.  
  4263.    has the same function like include with the exception that the
  4264. cachefile.library isn't ignored.
  4265.  
  4266.    * Name = Filename
  4267.  
  4268. incbin Name[,size]
  4269. ..................
  4270.  
  4271.    inserts the file with the optional length at the current address
  4272. into the code. Normally used for sounds and graphics.
  4273.  
  4274. incbin2 Name[,size]
  4275. ...................
  4276.  
  4277.    has the same function like incbin with the exception that the
  4278. cachefile.library isn't used.
  4279.  
  4280.    * Name = Name of the data file.
  4281.  
  4282. ibytes Name[,Length]
  4283. ....................
  4284.  
  4285.    has the same function like incbin
  4286.  
  4287. dsbin Name[,Length]
  4288. ...................
  4289.  
  4290.    defines a memory area with the length of the file specified by the
  4291. file. Optinally you can defined the maximal file length.
  4292.  
  4293.    * Name = Filename
  4294.  
  4295.    * Length = maximal file length
  4296.  
  4297. doscmd Name
  4298. ...........
  4299.  
  4300.    runs the program Name.
  4301.  
  4302.       dc.b    0,"$VER: Fubar 1.0 by Joe User"
  4303.       doscmd    "c:date >ram:Temp"
  4304.       incbin    ram:Temp
  4305.       doscmd    "c:delete ram:Temp"
  4306.  
  4307. pure
  4308. ....
  4309.  
  4310.    sets the Pure Bit while writing a program file.
  4311.  
  4312. Miscellaneous
  4313. -------------
  4314.  
  4315. trashreg Reglist
  4316. ................
  4317.  
  4318.    defines the registers that are available to the optimizer.
  4319.  
  4320.    * RegList = A normal Registerlist known by Movem.
  4321.  
  4322. super
  4323. .....
  4324.  
  4325.    disactivates Supervisor warnings.
  4326.  
  4327. mc[Type]
  4328. ........
  4329.  
  4330.    defines the processor type to allow certain commands and
  4331. addressmodes.
  4332.  
  4333.                             Processor-Type
  4334.  
  4335.    * 68000 Default Mode
  4336.  
  4337.    * 68010
  4338.  
  4339.    * 68020
  4340.  
  4341.    * 68030
  4342.  
  4343.    * 68040
  4344.  
  4345.    * 68060
  4346.  
  4347.    * 68881
  4348.  
  4349.    * 68882
  4350.  
  4351. bopt [opt[,...],...]
  4352. ....................
  4353.  
  4354.    sets the assembler options.
  4355.  
  4356.                                 Options
  4357.  
  4358. `m1[+,-]'
  4359.      activates/disactivates the 68010 mode.
  4360.  
  4361. `m2[+,-]'
  4362.      activates/disactivates the 68020 mode.
  4363.  
  4364. `m3[+,-]'
  4365.      activates/disactivates the 68030 mode.
  4366.  
  4367. `m4[+,-]'
  4368.      activates/disactivates the 68040 mode.
  4369.  
  4370. `m6[+,-]'
  4371.      activates/disactivates the 68060 mode.
  4372.  
  4373. `mf[+,-]'
  4374.      activates/disactivates the 68881/2 mode.
  4375.  
  4376. `ue[+,-]'
  4377.      activates/disactivates writing an executable file.
  4378.  
  4379. `uo[+,-]'
  4380.      activates/disactivates writing an object file.
  4381.  
  4382. `ua[+,-]'
  4383.      activates/disactivates writing an absolut file.
  4384.  
  4385. `un[+,-]'
  4386.      activates/disactivates writing file.
  4387.  
  4388. `p[+,-]'
  4389.      activates/disactivates writing a preassembled Include file.
  4390.  
  4391. `g[+,-]'
  4392.      activates/disactivates adding the prefix _ to each exported symbol.
  4393.  
  4394. `sx[+,-]'
  4395.      activates/disactivates writing all XRef/XDef symbols to a symbol
  4396.      hunk.
  4397.  
  4398. `sl[+,-]'
  4399.      activates/disactivates writing all normal symbols to a symbol hunk.
  4400.  
  4401. `sa[+,-]'
  4402.      activates/disactivates writing all symbols to a symbol hunk.
  4403.  
  4404. `sd[+,-]'
  4405.      activates/disactivates writing a BASM custom format Debug Hunk.
  4406.      Makes only sense as a program file and it needs a lot hd space
  4407.      because it includes all sources.
  4408.  
  4409. `s1[+,-]'
  4410.      activates/disactivates writing a SAS D1 compatible Debug Hunk.
  4411.  
  4412. `sf[+,-]'
  4413.      activates/disactivates writing the full sourcefile path into the
  4414.      debug hunk.  You should only use this for your own development
  4415.      system because other users may have different HD layouts. This
  4416.      option has only a meaning with in a SAS D1 Debug Hunk.
  4417.  
  4418. `j[+,-]'
  4419.      activates/disactivates setting the PURE Bit for a program file.
  4420.      The PURE Bit tells the Shell that this program can be loaded
  4421.      resident.
  4422.  
  4423. `J[+,-]'
  4424.      activates/disactivates creating the file ENV:BDebugProgram that
  4425.      contains the assembled filename for BDebug.
  4426.  
  4427. `a[+,-]'
  4428.      activates/disactivates creating of an .info file for each program.
  4429.      Useful if you use the assembler through the WB.
  4430.  
  4431. `A[+,-]'
  4432.      activates/disactivates the ARexxmode Option.  Only allowed in the
  4433.      commandline.
  4434.  
  4435. `i<DirName>'
  4436.      defines the include path.
  4437.  
  4438. `o<FileName>'
  4439.      defines the object filename
  4440.  
  4441. `P<Priority>'
  4442.      sets the task priority.
  4443.  
  4444. `c[+,-]'
  4445.      activates/disactivates that the assembler interpretes Upper and
  4446.      Lower case as 2 different chars.
  4447.  
  4448. `f[+,-]'
  4449.      activates/disactivates a faster mode that resolves all references
  4450.      in the 2nd pass.  Fortunately this mode needs more memory and has
  4451.      some disadvantages like uncorrect values during the listing.  This
  4452.      option has no effect during optimizing.
  4453.  
  4454. `M<Bytes>'
  4455.      defines the max macro expansion size.  If you get a macromemerror
  4456.      you should increase the size. Default 1000 Bytes.
  4457.  
  4458. `Z<Address>'
  4459.      tells the assembler that the source is starts in the memory at the
  4460.      defined address.  Useful for ARexx scripts.  Option is only
  4461.      available in the commandline.
  4462.  
  4463. `x[+,-]'
  4464.      uses the `cachefile.library' to load resident Includes/Incbins or
  4465.      add unknown files to the cachefile.library database.
  4466.  
  4467. `X[+,-]'
  4468.      erases all files that are controlled by the cachefile.library.
  4469.  
  4470. `y[+,-]'
  4471.      shows all files that are controlled by the cachefile.library.
  4472.  
  4473. `l[+,-]'
  4474.      activates/disactivates the listing output.
  4475.  
  4476. `l0[+,-]'
  4477.      activates/disactivates the listing macro expansion.
  4478.  
  4479. `L<Listingfile>'
  4480.      defines the Listing filename.
  4481.  
  4482. `h[+,-]'
  4483.      activates/disactivates the symbol listing output.
  4484.  
  4485. `H[+,-]'
  4486.      activates/disactivates the unused symbol output.
  4487.  
  4488. `v[+,-]'
  4489.      outputs a statistic after assembling.
  4490.  
  4491. `V[+,-]'
  4492.      as little status output as possible
  4493.  
  4494. `e[+,-]'
  4495.      creates an error list.
  4496.  
  4497. `es[+,-]'
  4498.      outputs the error list in the Barfly shell.  This option has no
  4499.      meaning in BASM.
  4500.  
  4501. `wo[+,-]'
  4502.      activates/disactivates Optimizing warnings.
  4503.  
  4504. `ws[+,-]'
  4505.      activates/disactivates Supervisor warnings.
  4506.  
  4507. `wm[+,-]'
  4508.      activates/disactivates Move16 warnings because the use of the
  4509.      move16 command is dangerous if you don't know the problems.
  4510.  
  4511. `w2[+,-]'
  4512.      activates/disactivates 68020 Addressmode warnings.
  4513.  
  4514. `w4[+,-]'
  4515.      activates/disactivates 64k-Access warnings.  It's useful if you
  4516.      accidently avoid to forget the address register.  Example: move.l
  4517.      8,d0 instead of move.l 8(an),d0
  4518.  
  4519. `b0'
  4520.      sets the Default Branch Length to 8-Bit. .b
  4521.  
  4522. `b1'
  4523.      sets the Default Branch Length to 16-Bit. .w
  4524.  
  4525. `b2'
  4526.      sets the Default Branch Length to 32-Bit. .l
  4527.  
  4528. `B0'
  4529.      sets the Default BaseDisplacement-Width to 8 Bit. .b
  4530.  
  4531. `B1'
  4532.      sets the Default BaseDisplacement-Width to 16 Bit. .w
  4533.  
  4534. `B2'
  4535.      sets the Default BaseDisplacement-Width to 32 Bit. .l
  4536.  
  4537. `n0'
  4538.      sets the Default OuterDisplacement-Width to 16 Bit. .w
  4539.  
  4540. `n1'
  4541.      sets the Default OuterDisplacement-Width to 32 Bit. .l
  4542.  
  4543. `q[+,-]'
  4544.      activates/disactivates align long after each rts, bra or jmp to
  4545.      align blocks to the cache structure.
  4546.  
  4547. `O[+,-]'
  4548.      activates/disactivates the Optimizer.  Without this option no
  4549.      optimizing will happen besides the addressmode converting.
  4550.  
  4551. `OG[+,-]'
  4552.      activates/disactivates Forward Reference Optimizing to use every
  4553.      possibility. In this mode the source is assembled until no further
  4554.      optimizing method is found.  First the source is assembled
  4555.      normally.  This is shown by the Output Pass 1.  Afterwards the
  4556.      optimize passes are started and continued until no further symbol
  4557.      changes and length errors occur.  This can take a while and
  4558.      depends on the source size.
  4559.  
  4560. `OT[+,-]'
  4561.      activates/disactivates Time Optimizing.
  4562.  
  4563.      Addressmode Converting
  4564.  
  4565. `OC0[+,-]'
  4566.      bdwan
  4567.  
  4568. `OC1[+,-]'
  4569.      bdwpc
  4570.  
  4571. `OC2[+,-]'
  4572.      anxn
  4573.  
  4574. `OC3[+,-]'
  4575.      pcxn
  4576.  
  4577. `OC4[+,-]'
  4578.      bdw
  4579.  
  4580. `OC5[+,-]'
  4581.      bdl
  4582.  
  4583. `OC6[+,-]'
  4584.      an
  4585.  
  4586. `OC7[+,-]'
  4587.      pc
  4588.  
  4589. `ODD[+,-]'
  4590.      activates Direct Addressmode Optimizing
  4591.  
  4592.      Direct Optimizing
  4593.  
  4594. `OD0[+,-]'
  4595.      move
  4596.  
  4597. `OD1[+,-]'
  4598.      clr
  4599.  
  4600. `OD2[+,-]'
  4601.      add
  4602.  
  4603. `OD3[+,-]'
  4604.      sub
  4605.  
  4606. `OD4[+,-]'
  4607.      lea
  4608.  
  4609. `OD5[+,-]'
  4610.      cmp
  4611.  
  4612. `OD6[+,-]'
  4613.      bcc
  4614.  
  4615. `OD7[+,-]'
  4616.      jsr
  4617.  
  4618. `OD8[+,-]'
  4619.      jmp
  4620.  
  4621. `OD9[+,-]'
  4622.      asl
  4623.  
  4624. `ODa[+,-]'
  4625.      or  ( This Optimizing is disactivated internal )
  4626.  
  4627. `ODb[+,-]'
  4628.      eor ( This Optimizing is disactivated internal )
  4629.  
  4630. `ODc[+,-]'
  4631.      and
  4632.  
  4633. `ODd[+,-]'
  4634.      mulu
  4635.  
  4636. `ODe[+,-]'
  4637.      muls
  4638.  
  4639. `ODf[+,-]'
  4640.      jsr+rts
  4641.  
  4642. `ODg[+,-]'
  4643.      jmp+rts
  4644.  
  4645. `ODh[+,-]'
  4646.      MovemNoRegister
  4647.  
  4648. `ODi[+,-]'
  4649.      MovemOneRegister
  4650.  
  4651. `ODj[+,-]'
  4652.      Link
  4653.  
  4654. `OAP[+,-]'
  4655.      activates PC-Relative Optimizing
  4656.  
  4657. `OAS[+,-]'
  4658.      activates Smalldata Optimizing
  4659.  
  4660. `OAL[+,-]'
  4661.      activates long nach word Optimizing
  4662.  
  4663. `OAX[+,-]'
  4664.      activates x(An) to (An) Optimizing
  4665.  
  4666. `OAY[+,-]'
  4667.      activates 68020++ An-EA Optimizing
  4668.  
  4669. `OAZ[+,-]'
  4670.      activates 68020++ PC-EA Optimizing
  4671.  
  4672. `OAR[+,-]'
  4673.      activates Register Optimizing
  4674.  
  4675.    You should be careful with the command *Note BOPT: MI_BOPT when you
  4676. activate Global-Optimize.  In every parse the default config is set and
  4677. therefore you should define all global options in the commandline or in
  4678. the configuration file.
  4679.  
  4680. 680xx Meta Commands
  4681. -------------------
  4682.  
  4683. mb Operand1,Operand2
  4684. ....................
  4685.  
  4686.    has the same function as move.b.
  4687.  
  4688. mw Operand1,Operand2
  4689. ....................
  4690.  
  4691.    has the same function as move.w.
  4692.  
  4693. ml Operand1,Operand2
  4694. ....................
  4695.  
  4696.    has the same function as move.l.
  4697.  
  4698. mq Operand1,Operand2
  4699. ....................
  4700.  
  4701.    has the same function as moveq.
  4702.  
  4703. xor.? Operand1,Operand2
  4704. .......................
  4705.  
  4706.    has the same function as eor.?.
  4707.  
  4708. xori.? Operand1,Operand2
  4709. ........................
  4710.  
  4711.    has the same function as eori.?.
  4712.  
  4713. bhs.? Label
  4714. ...........
  4715.  
  4716.    has the same function as bcc.?.
  4717.  
  4718. blo.? Label
  4719. ...........
  4720.  
  4721.    has the same function as bcs.?.
  4722.  
  4723. Assembler Macros
  4724. ================
  4725.  
  4726.    Macros are meta commands that can be based of many assembler
  4727. instructions to achieve an abstracter source layout.  In a macro you
  4728. can use several different pattern that are replaced by appropriate
  4729. parameters when the macro is called.  The parameter that are passed
  4730. during a macro call are represented by the following patterns:
  4731. \0,...,\9, \a,...,\z, \A,...,\Z.  The pattern ids are using the
  4732. hexadecimal format.  If a pattern is used with no related parameter an
  4733. empty string is inserted.  Furthermore if a parameter contains
  4734. tabulators or spaces it has to be placed between <...>.  When a macro
  4735. needs relative labels and is should be called more than one time you
  4736. should use the special pattern @.  This pattern is replaced by a number
  4737. that is based of 4 digits and that is increased after each call.  The
  4738. pattern \# is replaced by the value of the symbol narg that represents
  4739. the count of macro parameters.  Besides the standard patterns there are
  4740. some more advanced pattern functions supported that look like
  4741. \*Function-Name.  These functions don't belong to the motorola standard
  4742. thus they aren't supported by every assembler.  Another important point
  4743. is that you can also call macros from from macros but you can't define
  4744. macros in macros.
  4745.  
  4746.    The standard macro pattern
  4747.  
  4748.    Label & [. string] & [, string] & [, string] & [,...]        & [\\0]
  4749. & [\\1|] & [\\2|] & [\\3|]...[\\n|]
  4750.  
  4751.    The advanced macro pattern functions
  4752.  
  4753.    * ` \(Argument)' inserts the string of the macroparameter with the
  4754.      number the argument defines.
  4755.  
  4756.  
  4757.           \(1) =  \1
  4758.           \(1+3+4) = \8
  4759.  
  4760.    * `\*upper(String)' inserts the string in upper case.
  4761.  
  4762.    * `\*lower(String)' inserts the string in lower case.
  4763.  
  4764.    * `\*valof(Argument)' inserts the decimal value of the argument as a
  4765.      string.
  4766.  
  4767.    * `\*strlen(Symbol)' inserts the length of a symbol as a string.
  4768.  
  4769.    * `\*right(String,n)' inserts n chars of the right side of the
  4770.      string.  If the string contains less than n chars the whole string
  4771.      is inserted.
  4772.  
  4773.    * `\*left(String,n)' inserts n chars of the left side of the string.
  4774.      If the string contains less than n chars the whole string is
  4775.      inserted.
  4776.  
  4777.    * `\*mid(String,n,m)' inserts chars from position n to m from the
  4778.      string.  If the position is outside of the string length the chars
  4779.      till the end of the string is inserted.
  4780.  
  4781.  
  4782.      openwind MACRO
  4783.               move.l     intbase,a6
  4784.               lea.l      \1,a0
  4785.               jsr        OpenWindow(a6)
  4786.               ENDM
  4787.      
  4788.      start:
  4789.               openwind   newwindow
  4790.  
  4791.  
  4792.  
  4793.      movewind MACRO
  4794.               move.l     intbase,a6
  4795.               move.l     \1,a0
  4796.               moveq      #0,d0
  4797.               move.\0    \2,d1
  4798.               IFC        `\0',`b'
  4799.               ext.w      d1
  4800.               ENDC
  4801.               jsr        MoveWindow(a6)
  4802.               ENDM
  4803.      
  4804.      start:
  4805.               move.b     #10,d2
  4806.      1$:
  4807.               movewind.b newwindow,d2
  4808.               addq.b     #1,d2
  4809.               cmp.b      #100,d2
  4810.               bne.s      1$
  4811.  
  4812.  
  4813.      wait MACRO
  4814.               moveq      #-1,d0
  4815.      wait\
  4816.               dbra       d0,wait\
  4817.               ENDM
  4818.      
  4819.      start:
  4820.               wait
  4821.               wait
  4822.               wait
  4823.  
  4824.  
  4825.      test MACRO
  4826.               move.l     #\*upper(Hello),d0
  4827.               move.l     #\*lower(Hello),d0
  4828.               move.l     #\*strlen(1234567890123456),d0
  4829.               move.l     #\*valof(value),d0
  4830.               rts
  4831.      
  4832.               cstring    "\*left(abcdefgh,4)"
  4833.               even
  4834.               cstring    "\*left(abcdefgh,10)"
  4835.               even
  4836.               cstring    "\*right(abcdefgh,4)"
  4837.               even
  4838.               cstring    "\*right(abcdefgh,10)"
  4839.               even
  4840.               cstring    "\*mid(abcdefgh,2,4)"
  4841.               even
  4842.               cstring    "\*mid(abcdefgh,2,8)"
  4843.               even
  4844.      
  4845.               ENDM
  4846.      
  4847.      value = 123456789
  4848.      hello:
  4849.               test
  4850.  
  4851.  
  4852.       value = 123456789
  4853.      
  4854.      
  4855.      hello:
  4856.               move.l     #HELLO,d0
  4857.               move.l     #hello,d0
  4858.               move.l     #16,d0
  4859.               move.l     #123456789,d0
  4860.               rts
  4861.               cstring    "abcd"
  4862.               even
  4863.               cstring    "abcdefgh"
  4864.               even
  4865.               cstring    "efgh"
  4866.               even
  4867.               cstring    "abcdefgh"
  4868.               even
  4869.               cstring    "cdef"
  4870.               even
  4871.               cstring    "cdefgh"
  4872.               even
  4873.  
  4874.  
  4875.      PUTTAG MACRO
  4876.               IFC        "\2",""
  4877.      PUTTAG_COUNT set 0
  4878.               ENDC
  4879.      
  4880.               IFNC       "\2",""
  4881.               move.l     \2,-(a7)
  4882.      PUTTAG_COUNT SET PUTTAG_COUNT+4
  4883.               ENDC
  4884.      
  4885.               move.l     \1,-(a7)
  4886.      PUTTAG_COUNT SET PUTTAG_COUNT+4
  4887.      
  4888.               IFC        "\1","#TAG_END"
  4889.      PUTTAG_COUNT SET 4
  4890.               ENDC
  4891.      
  4892.               ENDM
  4893.      
  4894.      CLEARTAG MACRO
  4895.               lea.l      PUTTAG_COUNT(a7),a7
  4896.               ENDM
  4897.      
  4898.      
  4899.      
  4900.               PUTTAG     #TAG_END
  4901.               PUTTAG     #WA_Width,#100
  4902.               PUTTAG     #WA_ScreenTitle,#Title
  4903.               .
  4904.               .
  4905.               move.l     a7,a1
  4906.               sub.l      a0,a0
  4907.               jsr        OpenWindowTagList(a6)
  4908.               CLEARTAG
  4909.  
  4910. Highlevel Macros
  4911. ================
  4912.  
  4913.    In highlevel macros the operands are based of legal addressmodes.
  4914. Arguments are based of operands and the operators +,-,<<,>>. Conditions
  4915. are based of !,=, <,>,<=,>=,<>.  By using highlevel macros you can make
  4916. the programming of non critical source areas easier and more abstract.
  4917. Blame Mike Schwartz for this idea...he forced me to do it:-B
  4918.  
  4919. .REG
  4920. ....
  4921.  
  4922.    sets the accumulator register that is used to calculate arguments.
  4923. Default register is D0.
  4924.  
  4925. .BRANCH b|w|l
  4926. .............
  4927.  
  4928.    sets the length of branch commands that are used in the highlevel
  4929. macros.  Standard length is .b.
  4930.  
  4931. .FOR Operand[.b|w|l] = Operand TO Operand STEP Operand
  4932. ......................................................
  4933.  
  4934.    creates code for a for loop.  The optional width you define after
  4935. the first operand sets the width for all operations in the for loop.
  4936.  
  4937.  
  4938.        .FOR   d0.w = #1 to  STEP #2
  4939.        addq.w #1,d1
  4940.        .NEXT
  4941.      
  4942.        ;Compiled Code
  4943.      
  4944.        move.w #1,d0
  4945.      __for1:
  4946.        addq.w #1,d1
  4947.        add.w  #2,d0
  4948.        cmp.w  ,d0
  4949.        blt.b  __for1
  4950.  
  4951. .NEXT
  4952. .....
  4953.  
  4954.    closes the outer .FOR loop.
  4955.  
  4956. .IF [Argument] =,!, < , > , <> Operand
  4957. ......................................
  4958.  
  4959.    creates code for an IF-Operation.  You can remove the first argument
  4960. if you wanna test the operand.  For example .IF <>
  4961.  
  4962.  
  4963.        .IF    (a0) + #0 <> d1
  4964.        moveq  #0,d0
  4965.        .ELSE
  4966.        moveq  #1,d0
  4967.        .ENDIF
  4968.      
  4969.        ;Compiled Code
  4970.      
  4971.        move.l (a0),d7
  4972.        add.l  #0,d7
  4973.        cmp.l  d1,d7
  4974.        beq.b  __else1
  4975.        moveq  #0,d0
  4976.        bra.b  __endif1
  4977.      __else1:
  4978.        moveq  #1,d0
  4979.      __endif1:
  4980.  
  4981. .ELSE
  4982. .....
  4983.  
  4984.    starts an alternative IF-Block.
  4985.  
  4986. .ENDIF
  4987. ......
  4988.  
  4989.    closes the outer .IF block.
  4990.  
  4991. .WHILE [Argument] =,!, < , > , <> Operand
  4992. .........................................
  4993.  
  4994.    creates code for a while loop The optional width you define after
  4995. the first operand sets the width for all operations in the while loop.
  4996.  
  4997.  
  4998.        .WHILE d0 <> #0
  4999.        addq.w #1,d1
  5000.        .ENDWHILE
  5001.      
  5002.        ;Compiled Code
  5003.      
  5004.      __while1:
  5005.        cmp.l  #0,d0
  5006.        beq.s  __endwhile1
  5007.        addq.w #1,d1
  5008.        bra.s  __while1
  5009.      __endwhile1:
  5010.  
  5011. .ENDWHILE
  5012. .........
  5013.  
  5014.    closes the outer while loop.
  5015.  
  5016. .CALL Function [, Argument [, Argument [,...]]]
  5017. ...............................................
  5018.  
  5019.    calls a C-Funktion by parsing the arguments through the stack.
  5020. Arguments are calculated in the accumulator register.
  5021.  
  5022.  
  5023.  
  5024.        .CALL func , test + 0 - #20 , #test
  5025.      
  5026.        ;Compiled Code
  5027.      
  5028.        move.l test,d7
  5029.        add.l  0,d7
  5030.        sub.l  #20,d7
  5031.        move.l d7,-(a7)
  5032.        move.l #test,-(a7)
  5033.        jsr    func
  5034.        ifnc   "8","0"             ;Were there any parameters ?
  5035.        lea.l  __CALLSize(a7),a7
  5036.        endc
  5037.  
  5038. .RETURN Argument
  5039. ................
  5040.  
  5041.    returns a result value in the accumulator register.
  5042.  
  5043.  
  5044.        .return d1 + d2 + #$100
  5045.      
  5046.        ;Compiled Code
  5047.      
  5048.      
  5049.        move.l d1,d7
  5050.        add.l  d2,d7
  5051.        add.l  #$100,d7
  5052.  
  5053. .DEF func [, Operand [, Operand [,...]]]
  5054. ........................................
  5055.  
  5056.    defines a C-Stack function and loads the defined parameters into the
  5057. operands.
  5058.  
  5059.  
  5060.        .DEF func , d0.w , d1 , (a0)
  5061.        .ENDDEF
  5062.      
  5063.        ;Compiled Code
  5064.      
  5065.        XDEF   func
  5066.        link   a5,#0
  5067.        move.w $0a(a5),d0
  5068.        move.l $0c(a5),d1
  5069.        move.l $10(a5),(a0)
  5070.        unlk   a5            ;.ENDDEF
  5071.        rts
  5072.  
  5073. .ENDDEF
  5074. .......
  5075.  
  5076.    closes a function that was started by .DEF
  5077.  
  5078. .LET [ Operand =] Argument
  5079. ..........................
  5080.  
  5081.    calculates an argument in an accumulator or moves the value to a
  5082. defined operand.
  5083.  
  5084.  
  5085.        .LET + 4 - #LN_SIZE << #7
  5086.        .LET d1 = (a1) - (a0)
  5087.      
  5088.        ;Compiled Code
  5089.      
  5090.        add.l  4,d7
  5091.        sub.l  #LN_SIZE,d7
  5092.        lsl.l  #7,d7
  5093.      
  5094.        move.l (a1),d7
  5095.        sub.l  (a0),d7
  5096.        move.l d7,d1
  5097.  
  5098. Predefined Symbols
  5099. ==================
  5100.  
  5101. NARG
  5102. ....
  5103.  
  5104.    represents the macro parameter count in a macro.
  5105.  
  5106. BARFLY
  5107. ......
  5108.  
  5109.    represents the assembler version.
  5110.  
  5111. 680xx
  5112. .....
  5113.  
  5114.    represents the CPU processor type.
  5115.  
  5116. 6888x
  5117. .....
  5118.  
  5119.    represents the FPU processor type.
  5120.  
  5121. _MOVEMBYTES
  5122. ...........
  5123.  
  5124.    represents the byte count the last movem transfer used.
  5125.  
  5126.  
  5127.       lea    _MOVEMBYTES(a7),a7    ;frees the stack
  5128.  
  5129. _MOVEMREGS
  5130. ..........
  5131.  
  5132.    represents the last movem register mask.
  5133.  
  5134.  
  5135.       movem    (a7)+,_MOVEMREGS
  5136.  
  5137. __RS
  5138. ....
  5139.  
  5140.    represents the RS-Counter.
  5141.  
  5142. __SO
  5143. ....
  5144.  
  5145.    represents the RS-Counter.
  5146.  
  5147. __FO
  5148. ....
  5149.  
  5150.    represents the FO-Counter.
  5151.  
  5152. Optimizing
  5153. ==========
  5154.  
  5155.    Optimize Methods...
  5156.  
  5157. Direct Addressmode Optimizing
  5158. -----------------------------
  5159.  
  5160.    The assembler can direct optimize certain 68020...60 Addressmodes if
  5161. a faster 68000 addressmode exists.  This optimizing method should
  5162. always be activated because of compatibility reasons.
  5163.  
  5164.    * `(bd.w,an)' can be optimized to `x(an)' that removes 1 word and
  5165.      some cycles.
  5166.  
  5167.      +------------------------+--------------------+--------+
  5168.      |       Addressmode      |     Optimizing     | Option |
  5169.      +------------------------+--------------------+--------+
  5170.      +------------------------+--------------------+--------+
  5171.      | move. l (1000.w,an),dn | move.l 1000(an),dn |  -OC0  |
  5172.      +------------------------+--------------------+--------+
  5173.  
  5174.    * `(bd.w,pc)' can be optimized to `x(pc)' that removes 1 word and
  5175.      some cycles.
  5176.  
  5177.      +------------------------+--------------------+--------+
  5178.      |       Addressmode      |     Optimizing     | Option |
  5179.      +------------------------+--------------------+--------+
  5180.      +------------------------+--------------------+--------+
  5181.      | move. l (1000.w,pc),dn | move.l 1000(pc),dn |  -OC1  |
  5182.      +------------------------+--------------------+--------+
  5183.  
  5184.    * `(bd.w)' can be optimized to `bd.w' that removes 1 word and some
  5185.      cycles.
  5186.  
  5187.      +------------------------+--------------------+--------+
  5188.      |       Addressmode      |     Optimizing     | Option |
  5189.      +------------------------+--------------------+--------+
  5190.      +------------------------+--------------------+--------+
  5191.      |  move. l (bd.w),dn     |   move.l bd.w,dn   |  -OC4  |
  5192.      +------------------------+--------------------+--------+
  5193.  
  5194.    * `(bd.l)' can be optimized to `bd.l' that removes 1 word and some
  5195.      cycles.
  5196.  
  5197.      +------------------------+--------------------+--------+
  5198.      |       Addressmode      |     Optimizing     | Option |
  5199.      +------------------------+--------------------+--------+
  5200.      +------------------------+--------------------+--------+
  5201.      |  move. l (bd.l),dn     |   move.l bd.l,dn   |  -OC5  |
  5202.      +------------------------+--------------------+--------+
  5203.  
  5204.    * `(an)' can be optimized to `(an)' that removes 1 word and some
  5205.      cycles.  The addressmode `(an)' can be interpreted as a subgroup
  5206.      of `(bd,an,xn)'. Because `(an)' is a normal 68000 addressmode you
  5207.      should never switch off this optimizing method.
  5208.  
  5209.      +------------------------+--------------------+--------+
  5210.      |       Addressmode      |     Optimizing     | Option |
  5211.      +------------------------+--------------------+--------+
  5212.      +------------------------+--------------------+--------+
  5213.      |     move. l (an),dn    |   move.l (an),dn   |  -OC6  |
  5214.      +------------------------+--------------------+--------+
  5215.  
  5216.    * `(pc)' can be optimized to `(pc)' that removes 1 word and some
  5217.      cycles.  The addressmode `(pc)' can be interpreted as a subgroup
  5218.      of `(bd,pc,xn)'. Because `(pc)' is a normal 68000 addressmode you
  5219.      should never switch off this optimizing method.
  5220.  
  5221.      +------------------------+--------------------+--------+
  5222.      |       Addressmode      |     Optimizing     | Option |
  5223.      +------------------------+--------------------+--------+
  5224.      +------------------------+--------------------+--------+
  5225.      |     move. l (pc),dn    |   move.l (pc),dn   |  -OC7  |
  5226.      +------------------------+--------------------+--------+
  5227.  
  5228. Address Optimizing
  5229. ------------------
  5230.  
  5231.    * `Long'
  5232.  
  5233.      +---------------+----------------+---------------------+--------+
  5234.      | Addressmode   |   Optimizing   |         Note        | Option |
  5235.      +---------------+----------------+---------------------+--------+
  5236.      +---------------+----------------+---------------------+--------+
  5237.      |     x.l,EA    |    x.w,EA      | $ffff8000<=x<=$7fff |        |
  5238.      +---------------+----------------+---------------------+  -OAL  |
  5239.      |     EA,x.l    |    EA,x.l      | $ffff8000<=x<=$7fff |        |
  5240.      +---------------+----------------+---------------------+--------+
  5241.  
  5242.    * `x(an)'
  5243.  
  5244.      +---------------+----------------+---------------------+--------+
  5245.      | Addressmode   |   Optimizing   |         Note        | Option |
  5246.      +---------------+----------------+---------------------+--------+
  5247.      +---------------+----------------+---------------------+--------+
  5248.      |   x(an),EA    |    (an),EA     |         x=0         |        |
  5249.      +---------------+----------------+---------------------+  -OAX  |
  5250.      |   EA,x(an)    |    EA,(an)     |         x=0         |        |
  5251.      +---------------+----------------+---------------------+--------+
  5252.  
  5253.    * `PC-Relative'
  5254.  
  5255.      +---------------+----------------+---------------------+--------+
  5256.      | Addressmode   |   Optimizing   |         Note        | Option |
  5257.      +---------------+----------------+---------------------+--------+
  5258.      +---------------+----------------+---------------------+--------+
  5259.      |   label,EA    |  label(pc),EA  | $ffff8000<=x<=$7fff |  -OAP  |
  5260.      +---------------+----------------+---------------------+--------+
  5261.  
  5262.    * `A4-Smalldata'
  5263.  
  5264.      +---------------+----------------+---------------------+--------+
  5265.      | Addressmode   |   Optimizing   |         Note        | Option |
  5266.      +---------------+----------------+---------------------+--------+
  5267.      +---------------+----------------+---------------------+--------+
  5268.      |     x.l,EA    |    x(a4),EA    | $ffff8000<=x<=$7fff |        |
  5269.      +---------------+----------------+---------------------+  -OAS  |
  5270.      |     EA,x.l    |    EA,x(a4)    | $ffff8000<=x<=$7fff |        |
  5271.      +---------------+----------------+---------------------+--------+
  5272.  
  5273.    * `68020-An'
  5274.  
  5275.      +---------------+----------------+---------------------+--------+
  5276.      | Addressmode   |   Optimizing   |         Note        | Option |
  5277.      +---------------+----------------+---------------------+--------+
  5278.      +---------------+----------------+---------------------+--------+
  5279.      |   (x.l,an)    |    (an)        | x=0                 |  -OAY  |
  5280.      +---------------+----------------+---------------------+        |
  5281.      |   (x.l,an)    |    x(an)       | $ffffff80<=x<=$7f   |        |
  5282.      +---------------+----------------+---------------------+        |
  5283.      |   (x,an,xn)   |    0(an,xn)    | x=0                 |        |
  5284.      +---------------+----------------+---------------------+        |
  5285.      |   (x,an,xn)   |    (x.b,an,xn) | $ffffff80<=x<=$7f   |        |
  5286.      +---------------+----------------+---------------------+        |
  5287.      |   (x,an,xn)   |    (x.w,an,xn) | $ffff8000<=x<=$7fff |        |
  5288.      +---------------+----------------+---------------------+        |
  5289.      |   ([?],x)     |    ([?])       | x=0                 |        |
  5290.      |               |                | ? is also optimized |        |
  5291.      +---------------+----------------+---------------------+        |
  5292.      |   ([?],x)     |    ([?],x.w)   | $ffff8000<=x<=$7fff |        |
  5293.      |               |                | ? is also optimized |        |
  5294.      +---------------+----------------+---------------------+        |
  5295.      |   ([?],xn,x)  |    ([?],xn)    | x=0                 |        |
  5296.      |               |                | ? is also optimized |        |
  5297.      +---------------+----------------+---------------------+        |
  5298.      |   ([?],xn,x)  |    ([?],xn,x.w)| $ffff8000<=x<=$7fff |        |
  5299.      |               |                | ? is also optimized |        |
  5300.      +---------------+----------------+---------------------+--------+
  5301.  
  5302.    * `68020-PC'
  5303.  
  5304.      +---------------+----------------+---------------------+--------+
  5305.      | Addressmode   |   Optimizing   |         Note        | Option |
  5306.      +---------------+----------------+---------------------+--------+
  5307.      +---------------+----------------+---------------------+--------+
  5308.      |   (x.l,pc)    |    (pc)        | x=0                 |  -OAZ  |
  5309.      +---------------+----------------+---------------------+        |
  5310.      |   (x.l,pc)    |    x(pc)       | $ffffff80<=x<=$7f   |        |
  5311.      +---------------+----------------+---------------------+        |
  5312.      |   (x,pc,xn)   |    0(pc,xn)    | x=0                 |        |
  5313.      +---------------+----------------+---------------------+        |
  5314.      |   (x,pc,xn)   |    (x.b,pc,xn) | $ffffff80<=x<=$7f   |        |
  5315.      +---------------+----------------+---------------------+        |
  5316.      |   (x,pc,xn)   |    (x.w,pc,xn) | $ffff8000<=x<=$7fff |        |
  5317.      +---------------+----------------+---------------------+        |
  5318.      |   ([?],x)     |    ([?])       | x=0                 |        |
  5319.      |               |                | ? is also optimized |        |
  5320.      +---------------+----------------+---------------------+        |
  5321.      |   ([?],x)     |    ([?],x.w)   | $ffff8000<=x<=$7fff |        |
  5322.      |               |                | ? is also optimized |        |
  5323.      +---------------+----------------+---------------------+        |
  5324.      |   ([?],xn,x)  |    ([?],xn)    | x=0                 |        |
  5325.      |               |                | ? is also optimized |        |
  5326.      +---------------+----------------+---------------------+        |
  5327.      |   ([?],xn,x)  |    ([?],xn,x.w)| $ffff8000<=x<=$7fff |        |
  5328.      |               |                | ? is also optimized |        |
  5329.      +---------------+----------------+---------------------+--------+
  5330.  
  5331. #x Optimizing
  5332. -------------
  5333.  
  5334.    * `Move'
  5335.  
  5336.      +-------------------+------------------+-------------------------+--------+
  5337.      | Addressmode       |   Optimizing     |         Note            | Option |
  5338.      +-------------------+------------------+-------------------------+--------+
  5339.      +-------------------+------------------+-------------------------+--------+
  5340.      |  move.l #x,dn     |   moveq #x,dn    |    $ffffff80<=$7f       |  -OD0  |
  5341.      +-------------------+------------------+-------------------------+        |
  5342.      |  move.? #0,an     |  suba.l an,an    |      ? = w or l         |        |
  5343.      +-------------------+------------------+-------------------------+        |
  5344.      |  move.l #x,dn     | moveq #y,dn      | $10000<=x<=$7f0000      |        |
  5345.      |                   | swap dn          |                         |        |
  5346.      +-------------------+------------------+-------------------------+        |
  5347.      |  move.l #x,dn     | moveq #y,dn      | $ff80ffff<=x<=$fffEffff |        |
  5348.      |                   | swap dn          |                         |        |
  5349.      +-------------------+------------------+-------------------------+        |
  5350.      |  move.l #x,dn     | moveq #y,dn      |      $80<=x<=$ff        |        |
  5351.      |                   | neg.b dn         |                         |        |
  5352.      +-------------------+------------------+-------------------------+        |
  5353.      |  move.l #x,dn     | moveq #y,dn      |     $ffff<=x<=$ff81     |        |
  5354.      |                   | neg.w dn         |                         |        |
  5355.      +-------------------+------------------+-------------------------+        |
  5356.      |  move.l #x,dn     | moveq #y,dn      | $ffff0080<=x<=$ffff0001 |        |
  5357.      |                   | neg.w dn         |                         |        |
  5358.      +-------------------+------------------+-------------------------+        |
  5359.      |  move.? #0,EA     | clr.? EA         | ? = w or l.See Trashreg |        |
  5360.      |                   |                  | optimizing. I also check|        |
  5361.      |                   |                  | if it accesses the HW   |        |
  5362.      +-------------------+------------------+-------------------------+        |
  5363.      | move.b #$ff,EA    | st EA            |                         |        |
  5364.      +-------------------+------------------+-------------------------+        |
  5365.      | movea.l -4(an),an | movea.l -(an),an |                         |        |
  5366.      +-------------------+------------------+-------------------------+--------+
  5367.  
  5368.    * `Clr'
  5369.  
  5370.      +---------------+----------------+-------------------------+--------+
  5371.      | Addressmode   |   Optimizing   |         Note            | Option |
  5372.      +---------------+----------------+-------------------------+--------+
  5373.      +---------------+----------------+-------------------------+--------+
  5374.      |    clr.l dn   |   moveq #0,dn  |                         |  -OD1  |
  5375.      +---------------+----------------+-------------------------+--------+
  5376.  
  5377.    * `Add'
  5378.  
  5379.      +---------------+----------------+-------------------------+--------+
  5380.      | Addressmode   |   Optimizing   |         Note            | Option |
  5381.      +---------------+----------------+-------------------------+--------+
  5382.      +---------------+----------------+-------------------------+--------+
  5383.      |  add.? #x,EA  |  addq.? #x,EA  |       1<=x<=8           |  -OD2  |
  5384.      +---------------+----------------+-------------------------+        |
  5385.      |  add.? #x,EA  |  subq.? #x,EA  |      -8<=x<=-1          |        |
  5386.      +---------------+----------------+-------------------------+        |
  5387.      |  add.? #x,an  | lea.l x(an),an |   $ffff8000<=x<=$7fff   |        |
  5388.      +---------------+----------------+-------------------------+        |
  5389.      |  add.? #0,EA  | tst.? EA       |       legal EA          |        |
  5390.      +---------------+----------------+-------------------------+        |
  5391.      |  add.? #0,an  | removed        |                         |        |
  5392.      +---------------+----------------+-------------------------+--------+
  5393.  
  5394.    * `Sub'
  5395.  
  5396.      +---------------+----------------+-------------------------+--------+
  5397.      | Addressmode   |   Optimizing   |         Note            | Option |
  5398.      +---------------+----------------+-------------------------+--------+
  5399.      +---------------+----------------+-------------------------+--------+
  5400.      |  sub.? #x,EA  |  subq.? #x,EA  |       1<=x<=8           |  -OD3  |
  5401.      +---------------+----------------+-------------------------+        |
  5402.      |  sub.? #x,EA  |  addq.? #x,EA  |      -8<=x<=-1          |        |
  5403.      +---------------+----------------+-------------------------+        |
  5404.      |  sub.? #x,an  |lea.l -x(an),an |   $ffff8000<=x<=$7fff   |        |
  5405.      +---------------+----------------+-------------------------+        |
  5406.      |  sub.? #0,EA  | tst.? EA       |       legal EA          |        |
  5407.      +---------------+----------------+-------------------------+        |
  5408.      |  sub.? #0,an  | removed        |                         |        |
  5409.      +---------------+----------------+-------------------------+--------+
  5410.  
  5411.    * `Lea'
  5412.  
  5413.      +---------------+----------------+-------------------------+--------+
  5414.      | Addressmode   |   Optimizing   |         Note            | Option |
  5415.      +---------------+----------------+-------------------------+--------+
  5416.      +---------------+----------------+-------------------------+--------+
  5417.      | lea x(an),an  |  addq.w #x,an  |       1<=x<=8           |        |
  5418.      +---------------+----------------+-------------------------+  -OD4  |
  5419.      | lea x(an),an  |  subq.w #x,an  |      -8<=x<=-1          |        |
  5420.      +---------------+----------------+-------------------------+--------+
  5421.  
  5422.    * `Cmp'
  5423.  
  5424.      +---------------+----------------+-------------------------+--------+
  5425.      | Addressmode   |   Optimizing   |         Note            | Option |
  5426.      +---------------+----------------+-------------------------+--------+
  5427.      +---------------+----------------+-------------------------+--------+
  5428.      |  cmp.? #0,EA  |   tst.? EA     |                         |  -OD5  |
  5429.      +---------------+----------------+-------------------------+--------+
  5430.  
  5431.    * `Bcc'
  5432.  
  5433.      The assembler tries to optimize the branch on the smallest
  5434.      possible length so that can win max 2 words and some cycles.
  5435.  
  5436.      +---------------+----------------+-------------------------+--------+
  5437.      | Addressmode   |   Optimizing   |         Note            | Option |
  5438.      +---------------+----------------+-------------------------+--------+
  5439.      +---------------+----------------+-------------------------+--------+
  5440.      |  Bcc.l label  |  Bcc.w label   |   $8000<=label<=$7fff   |  -OD6  |
  5441.      +---------------+----------------+-------------------------+        |
  5442.      |  Bcc.l label  |  Bcc.s label   |     $80<=label<=$7f     |        |
  5443.      +---------------+----------------+-------------------------+        |
  5444.      |  Bcc.w label  |  Bcc.s label   |     $80<=label<=$7f     |        |
  5445.      +---------------+----------------+-------------------------+--------+
  5446.  
  5447.      Attention! This optimizing methid is unsafe when you use
  5448.      BRANCH-Tables.  You should switch off the optimize method over
  5449.      this area.
  5450.  
  5451.  
  5452.    * `Jsr'
  5453.  
  5454.      +---------------+----------------+-------------------------+--------+
  5455.      | Addressmode   |   Optimizing   |         Note            | Option |
  5456.      +---------------+----------------+-------------------------+--------+
  5457.      +---------------+----------------+-------------------------+--------+
  5458.      |   jsr label   |  bsr.w label   |   $8000<=Offset<=$7fff  |        |
  5459.      +---------------+----------------+-------------------------+  -OD7  |
  5460.      |   jsr label   |  bsr.s label   |     $80<=Offset<=$7f    |        |
  5461.      +---------------+----------------+-------------------------+--------+
  5462.  
  5463.      Attention! This optimizing methid is unsafe when you use
  5464.      JSR-Tables.  You should switch off the optimize method over this
  5465.      area.
  5466.  
  5467.  
  5468.    * `Jmp'
  5469.  
  5470.      +---------------+----------------+-------------------------+--------+
  5471.      | Addressmode   |   Optimizing   |         Note            | Option |
  5472.      +---------------+----------------+-------------------------+--------+
  5473.      +---------------+----------------+-------------------------+--------+
  5474.      |   jmp label   |  bra.w label   |$ffff8000<=Offset<=$7fff |        |
  5475.      +---------------+----------------+-------------------------+  -OD8  |
  5476.      |   jmp label   |  bra.s label   |$ffffff80<=Offset<=$7f   |        |
  5477.      +---------------+----------------+-------------------------+--------+
  5478.  
  5479.    * `Asl'
  5480.  
  5481.      +---------------+----------------+-------------------------+--------+
  5482.      | Addressmode   |   Optimizing   |         Note            | Option |
  5483.      +---------------+----------------+-------------------------+--------+
  5484.      +---------------+----------------+-------------------------+--------+
  5485.      |  asl.? #1,dn  |  add.? dn,dn   |                         |  -OD9  |
  5486.      +---------------+----------------+-------------------------+--------+
  5487.  
  5488.    * `Or' This optimizing method isn't safe because of the changed
  5489.      condition flags.
  5490.  
  5491.      +---------------+----------------+-------------------------+--------+
  5492.      | Addressmode   |   Optimizing   |         Note            | Option |
  5493.      +---------------+----------------+-------------------------+--------+
  5494.      +---------------+----------------+-------------------------+--------+
  5495.      |  or.? #x,dn   |  bset #y,dn    | x=y^2                   |  -ODa  |
  5496.      +---------------+----------------+-------------------------+--------+
  5497.  
  5498.    * `Eor' This optimizing method isn't safe because of the changed
  5499.      condition flags.
  5500.  
  5501.      +---------------+----------------+-------------------------+--------+
  5502.      | Addressmode   |   Optimizing   |         Note            | Option |
  5503.      +---------------+----------------+-------------------------+--------+
  5504.      +---------------+----------------+-------------------------+--------+
  5505.      |  eor.? #x,dn  |  bchg #y,dn    | x=y^2                   |  -ODb  |
  5506.      +---------------+----------------+-------------------------+--------+
  5507.  
  5508.    * `Mulu'
  5509.  
  5510.      Be very careful with this optimizing.
  5511.  
  5512.      +---------------+----------------+-------------------------+--------+
  5513.      | Addressmode   |   Optimizing   |         Note            | Option |
  5514.      +---------------+----------------+-------------------------+--------+
  5515.      +---------------+----------------+-------------------------+--------+
  5516.      | mulu.w #x,dn  | swap dn        | x=2^y                   |  -ODc  |
  5517.      |               | clr.w dn       | y=y1+y2                 |        |
  5518.      |               | swap dn        | y=1,add.l dn,dn         |        |
  5519.      |               | lsl.l #y1,dn   |                         |        |
  5520.      |               | lsl.l #y2,dn   |                         |        |
  5521.      +---------------+----------------+-------------------------+        |
  5522.      | mulu.l #x,dn  | lsl.l #y1,dn   | x=2^y                   |        |
  5523.      |               | lsl.l #y2,dn   | y=y1+y2                 |        |
  5524.      |               |                | y >= 16                 |        |
  5525.      |               |                | swap dn , y-16          |        |
  5526.      +---------------+----------------+-------------------------+--------+
  5527.  
  5528.    * `Muls'
  5529.  
  5530.      Be very careful with this optimizing.
  5531.  
  5532.      +---------------+----------------+-------------------------+--------+
  5533.      | Addressmode   |   Optimizing   |         Note            | Option |
  5534.      +---------------+----------------+-------------------------+--------+
  5535.      +---------------+----------------+-------------------------+--------+
  5536.      | muls.w #x,dn  | ext.l dn       | x=2^y                   |  -ODd  |
  5537.      |               | asl.l #y1,dn   | y=y1+y2                 |        |
  5538.      |               | asl.l #y2,dn   | y=1 , add.l dn,dn       |        |
  5539.      +---------------+----------------+-------------------------+        |
  5540.      | muls.l #x,dn  | asl.l #y1,dn   | x=2^y                   |        |
  5541.      |               | asl.l #y2,dn   | y=y1+y2                 |        |
  5542.      |               |                | y >= 16                 |        |
  5543.      |               |                | swap dn ,y-16           |        |
  5544.      +---------------+----------------+-------------------------+--------+
  5545.  
  5546.    * `Jsr+Rts'
  5547.  
  5548.      +--------------+---------------+------------------------+-------+
  5549.      | Addressmode   |   Optimizing   |         Note            |
  5550.      Option |
  5551.      +--------------+---------------+------------------------+-------+
  5552.      +--------------+---------------+------------------------+-------+
  5553.      | jsr EA        | jmp EA         | No optimizing if there's|  -ODe
  5554.      | | rts           |                | a label before RTS      |
  5555.         |
  5556.      +--------------+---------------+------------------------+-------+
  5557.  
  5558.    * `Bsr+Rts'
  5559.  
  5560.      +--------------+---------------+------------------------+-------+
  5561.      | Addressmode   |   Optimizing   |         Note            |
  5562.      Option |
  5563.      +--------------+---------------+------------------------+-------+
  5564.      +--------------+---------------+------------------------+-------+
  5565.      | jmp EA        | jmp EA         | No optimizing if there's|  -ODf
  5566.      | | rts           |                | a label before RTS      |
  5567.         |
  5568.      +--------------+---------------+------------------------+-------+
  5569.  
  5570.    * `MovemNoRegister'
  5571.  
  5572.      +---------------+----------------+-------------------------+--------+
  5573.      | Addressmode   |   Optimizing   |         Note            | Option |
  5574.      +---------------+----------------+-------------------------+--------+
  5575.      +---------------+----------------+-------------------------+--------+
  5576.      |  movem.l ,EA  |     Removed    |                         |        |
  5577.      +---------------+----------------+-------------------------+  -ODh  |
  5578.      |  movem.l EA,  |     Removed    |                         |        |
  5579.      +---------------+----------------+-------------------------+--------+
  5580.  
  5581.    * `MovemOneRegister'
  5582.  
  5583.      +---------------+----------------+-------------------------+--------+
  5584.      | Addressmode   |   Optimizing   |         Note            | Option |
  5585.      +---------------+----------------+-------------------------+--------+
  5586.      +---------------+----------------+-------------------------+--------+
  5587.      | movem.l Xn,EA |  Move.l Xn,EA  | Alter the status flags! |        |
  5588.      +---------------+----------------+-------------------------+  -ODi  |
  5589.      | movem.l EA,Xn |  Move.l EA,Xn  | Alter the status flags! |        |
  5590.      +---------------+----------------+-------------------------+--------+
  5591.  
  5592. Register Optimizing
  5593. -------------------
  5594.  
  5595.    * `#xxx' is switched off.
  5596.  
  5597.         * An address register is set free by `trashreg'.
  5598.  
  5599.           +---------------+--------------------+-------------------------+--------+
  5600.           | Addressmode   |   Optimizing       |         Note            | Option |
  5601.           +---------------+--------------------+-------------------------+--------+
  5602.           +---------------+--------------------+-------------------------+--------+
  5603.           |move.? EA,label| lea.l label(pc),an | $ffff8000<=label<=$7fff |        |
  5604.           |               | move.? EA,(an)     |                         |  -OAR  |
  5605.           +---------------+--------------------+-------------------------+        |
  5606.           |  tst.?  label | lea.l label(pc),an | $ffff8000<=label<=$7fff |        |
  5607.           |               | tst.? (an)         |                         |        |
  5608.           +---------------+--------------------+-------------------------+        |
  5609.           |  not.?  label | lea.l label(pc),an | $ffff8000<=label<=$7fff |        |
  5610.           |               | not.? (an)         |                         |        |
  5611.           +---------------+--------------------+-------------------------+        |
  5612.           |  neg.?  label | lea.l label(pc),an | $ffff8000<=label<=$7fff |        |
  5613.           |               | neg.? (an)         |                         |        |
  5614.           +---------------+--------------------+-------------------------+        |
  5615.           |  negx.? label | lea.l label(pc),an | $ffff8000<=label<=$7fff |        |
  5616.           |               | negx.? (an)        |                         |        |
  5617.           +---------------+--------------------+-------------------------+        |
  5618.           |  nbcd label   | lea.l label(pc),an | $ffff8000<=label<=$7fff |        |
  5619.           |               | nbcd (an)          |                         |        |
  5620.           +---------------+--------------------+-------------------------+        |
  5621.           |   scc label   | lea.l label(pc),an | $ffff8000<=label<=$7fff |        |
  5622.           |               | scc (an)           |                         |        |
  5623.           +---------------+--------------------+-------------------------+--------+
  5624.  
  5625.    * `#x' Optimizing on.
  5626.  
  5627.         * An address register is set free by `trashreg'.
  5628.  
  5629.           +---------------+--------------------+-------------------------+--------+
  5630.           | Addressmode   |   Optimizing       |         Note            | Option |
  5631.           +---------------+--------------------+-------------------------+--------+
  5632.           +---------------+--------------------+-------------------------+--------+
  5633.           | move.l #x,EA  | moveq  #x,dn       |    $ffffff80<=x<=$7f    |        |
  5634.           |               | move.l dn,EA       |                         |  -OAR  |
  5635.           +---------------+--------------------+-------------------------+        |
  5636.           | ori.l  #x,EA  | moveq  #x,dn       |    $ffffff80<=x<=$7f    |        |
  5637.           |               | or.l   dn,EA       |                         |        |
  5638.           +---------------+--------------------+-------------------------+        |
  5639.           | eori.l #x,EA  | moveq  #x,dn       |    $ffffff80<=x<=$7f    |        |
  5640.           |               | eor.l  dn,EA       |                         |        |
  5641.           +---------------+--------------------+-------------------------+        |
  5642.           | andi.l #x,EA  | moveq  #x,dn       |    $ffffff80<=x<=$7f    |        |
  5643.           |               | and.l  dn,EA       |                         |        |
  5644.           +---------------+--------------------+-------------------------+        |
  5645.           | addi.l #x,EA  | moveq  #x,dn       |    $ffffff80<=x<=$7f    |        |
  5646.           |               | add.l  dn,EA       |                         |        |
  5647.           +---------------+--------------------+-------------------------+        |
  5648.           | subi.l #x,EA  | moveq  #x,dn       |    $ffffff80<=x<=$7f    |        |
  5649.           |               | sub.l  dn,EA       |                         |        |
  5650.           +---------------+--------------------+-------------------------+        |
  5651.           | cmpi.l #x,EA  | moveq  #x,dn       |    $ffffff80<=x<=$7f    |        |
  5652.           |               | cmp.l  EA,dn       |                         |        |
  5653.           +---------------+--------------------+-------------------------+        |
  5654.           | move.? #0,EA  | moveq  #0,dn       | Time optimizing         |        |
  5655.           |               | move.l dn,EA       | must be on              |        |
  5656.           +---------------+--------------------+-------------------------+--------+
  5657.  
  5658. How does Optimizing work ?
  5659. --------------------------
  5660.  
  5661.    In single-pass Optimizing the assembler can only optimize commands
  5662. where it can resolve the reference in the first pass.  This means the
  5663. label or symbol has to be known before.  In multi-pass Optimizing it
  5664. can optimize every command without bothering where the label is defined.
  5665. The Assembler keeps all labels each pass but increases a change counter
  5666. if the old contents differs with the new contents.  The exception is
  5667. that the assembler can't optimize commands that depend on symbols that
  5668. are defined after the command.  The reason is that the Assembler has to
  5669. remove each pass every symbol to avoid problems with `IFD' and `IFND'
  5670. that can cause that certain areas aren't assembled in multi-pass mode.
  5671. You probably noticed that i assume that nobody used `IFD' or `IFND'
  5672. with labels because that would also break multi-pass.
  5673.  
  5674.    An example for a construct that can't be optimized.
  5675.  
  5676.           move.l #1,NULL(a0)
  5677.      NULL=0
  5678.  
  5679. Problems...
  5680. -----------
  5681.  
  5682.    You should always be careful with optimizing because it can cause
  5683. bugs in certain source areas.  Branch optimizing for example has to be
  5684. switched off if you use JMP-Towers.
  5685.  
  5686.  
  5687.           lsl.w #1,d0
  5688.           jmp   Tower(pc,d0.w)
  5689.      
  5690.       Tower:
  5691.           bra.w func1
  5692.           bra.w func2
  5693.           bra.w func3
  5694.      
  5695.       could be be optimized to
  5696.      
  5697.       Tower:
  5698.           bra.w func1
  5699.           bra.s func2
  5700.           bra.s func3
  5701.      
  5702.       that leads to program bugs.
  5703.      
  5704.       Solution:
  5705.      
  5706.       bopt OD6-
  5707.      
  5708.       Tower:
  5709.           bra.w func1
  5710.           bra.w func2
  5711.           bra.w func3
  5712.      
  5713.       bopt OD6+
  5714.  
  5715. Preassembled Includes
  5716. =====================
  5717.  
  5718.    If you wanna assemble a program that needs to load a lot includes
  5719. it's useful to preassemble the includes and load one file because  the
  5720. real slowdown factor is the need loading time.   You can only use
  5721. absolut symbols and macros in a preassembled file.   All relative and
  5722. symbols defined by `set' aren't written into  a preassembled file.
  5723. The created file isn't compress to avoid any slowdown but if  the file
  5724. size is critical you can compress the file by xpk and  load it through
  5725. the xfh filesystem.
  5726.  
  5727.      basm -p Source.S creates the preassembled file Source.p
  5728.  
  5729.  
  5730.      An error location could be absolut symbols that are calculated  by
  5731.      relative symbols. You should avoid these symbols.
  5732.  
  5733.      Symbol=Label1-Label2
  5734.  
  5735.  
  5736. Resident includes
  5737. =================
  5738.  
  5739.    `BASM' can control an Include and Incbin database by the library
  5740. `cachefile.library' to get rid of the loading delays.  The files in the
  5741. database can be shown and deleted.
  5742.  
  5743. Basm Assembler System
  5744. =====================
  5745.  
  5746. Cli Calling Convention
  5747. ----------------------
  5748.  
  5749.    `Format:'
  5750.  
  5751.      BASM [-Option] Name
  5752.  
  5753.  
  5754.    This is the commandline version of the assembler and can be easy
  5755. integrated in own development system, for example `Make' and  `CED'.
  5756. An assembler error is indicated by the result 20 and the result 10  is
  5757. used if no source file were specified.
  5758.  
  5759.    * `Option'
  5760.  
  5761.      The same options are accepted that are described               in
  5762.      the assembler command *Note BOPT: MI_BOPT.                The
  5763.      following options are accepted additionally.
  5764.  
  5765.         * A[+,-] Turns ARexx mode on/off
  5766.  
  5767.         * C <Configuration> loads a configuration file
  5768.  
  5769.         * d <Symbol=Value> defines a symbol
  5770.  
  5771.    * `Standard-Optionen'
  5772.  
  5773.  
  5774.           ;All other options are disactivated.
  5775.           
  5776.           c+,e+,m1000,wo+,ws+,wm+,w2+,w4+
  5777.           b1+,B0+,n1+
  5778.           OC0+,OC1+,OC2+,OC3+,OC4+,OC5+,OC6+,OC7+,
  5779.           ODD+,OD0+,OD1+,OD2+,OD3+,OD4+,OD5+,OD6+,OD7+,OD8+,
  5780.           OD9+,ODc+,ODe+,ODf+,ODg+
  5781.           OAP+,OAL+,OAX+,OAY+,OAZ+,OAR+
  5782.  
  5783. Configuration
  5784. -------------
  5785.  
  5786. Global
  5787. ......
  5788.  
  5789.    You can define the global configuration through the file
  5790. `ENV:BASMOption'. The internal standard configuration  is not replaced
  5791. but can only be changed.
  5792.  
  5793.    File `ENV:BASMOption'
  5794.  
  5795.  
  5796.       -v
  5797.       -f
  5798.       -c-
  5799.       -iASM:
  5800.  
  5801.      If a line starts with - it's ignored.
  5802.  
  5803.  
  5804. WB Tooltypes
  5805. ............
  5806.  
  5807.    Additionally you can also define the above described configuration
  5808. options in the tooltypes of the source file icon.   Furthermore `BASM'
  5809. allows a special tooltype to define  an output window.
  5810.  
  5811.    o Window= <Window Defintion>
  5812.  
  5813. ARexx
  5814. =====
  5815.  
  5816.    The `BASM' ARexx Port Name is `BASM_rexx' and the  ARexx Script
  5817. suffix `.basm'.   To activate the `BASM' ARexx mode you have to start
  5818. `BASM' with the option -A.
  5819.  
  5820. BASM
  5821. ....
  5822.  
  5823.    `BASM [-Option] Name'
  5824.  
  5825.    This ARexx command starts the assembler and coincides with the
  5826. CLI-syntax structure.
  5827.  
  5828. BEND
  5829. ....
  5830.  
  5831.    `BEND'
  5832.  
  5833.    This ARexx command closes the ARexx port and shuts down the
  5834. assembler.
  5835.  
  5836. BGETERROR
  5837. .........
  5838.  
  5839.    `BGETERROR'
  5840.  
  5841.    With this ARexx command you will receive an explanation of the actual
  5842. errors. If no errors exist it will return a status code 20.
  5843.  
  5844.    Error Format String
  5845.  
  5846.    OFFSET:FILE:<Error Description>
  5847.  
  5848. BNEXTERROR
  5849. ..........
  5850.  
  5851.    `BNEXTERROR'
  5852.  
  5853.    This ARexx command will cause a jump to the next error in the list.
  5854. If there are no further errors in the list it will return a status
  5855. code 20.
  5856.  
  5857. BINITERROR
  5858. ..........
  5859.  
  5860.    `BINITERROR'
  5861.  
  5862.    This ARexx command will cause a jump to the first entry in the error
  5863. list. If no error exists it will return a status code 20.
  5864.  
  5865. Compatibility
  5866. =============
  5867.  
  5868. to other assemblers...
  5869. ----------------------
  5870.  
  5871.  
  5872.      Fortunately `BASM' can't be 100% compatible to every assembler on
  5873.      the amiga market.  Thus you can expect problems with different
  5874.      sources.  In general you can expect problems with commands that
  5875.      don't belong to a standard like option commands.  Furthermore you
  5876.      should also be careful with sources that directly depend on the
  5877.      assembler implementation.  Because `BASM' is a 1-Pass Assembler in
  5878.      the normal mode with an additional backpatch phase you shouldn't
  5879.      define symbols that can't be resolved at once.  An ideal example
  5880.      for this practice is the `Xoper2.2' Source that was developed with
  5881.      the PD Assembler A68k.  While assembling with `BASM' the assembler
  5882.      detects that a not defined symbols is accessed through the `SET'
  5883.      command.  Generally this should cause an error at once but
  5884.      unfortunately `A68k' doesn't show anything and uses the last value
  5885.      of `cmdnum'.
  5886.  
  5887.  
  5888.  
  5889.           ADDCMD        MACRO
  5890.           cmdnum        set     cmdnum+1
  5891.                   dc.b    \1,0
  5892.                   ENDM
  5893.                       .
  5894.                       .
  5895.                       .
  5896.           ;Here it's using `cmdnum' although
  5897.           ;the symbol wasn't defined yet
  5898.                   addq    #1,d2
  5899.                   cmp.w   #cmdnum,d2
  5900.                   bne.s   1$
  5901.                       .
  5902.                       .
  5903.                       .
  5904.           
  5905.           ;Here the cmdnum is first defined
  5906.           cmdnum        set      0
  5907.           commds        ADDCMD  'time'
  5908.                   ADDCMD  'taskpri'
  5909.                   ADDCMD  'info'
  5910.                   ADDCMD  'pri'
  5911.                   ADDCMD  'flush'
  5912.  
  5913.      Because the A68k is a 2-Pass Assembler he can assemble this Source
  5914.      without problems.
  5915.  
  5916.  
  5917.      Another Problem is that the assembler argument parser doesn't
  5918.      detect Overflow because of speed reasons. I don't think it's worth
  5919.      it...if you differ tell me your opinion.
  5920.  
  5921.  
  5922.      The assembler doesn't support the following motorola syntax bugs
  5923.      because of the internal structure of the parser it would cause
  5924.      major problems in the multi-pass mode.
  5925.  
  5926.  
  5927.           symbol: equ 0
  5928.           symbol: equr d0
  5929.  
  5930. C-Compiler Assembler
  5931. --------------------
  5932.  
  5933. Dice
  5934. ....
  5935.  
  5936.    If you use Basm as a `DASM' replacement you have to run `Basm' with
  5937. the option -OAS to activate the Smalldata mode.  If you wanna emulate
  5938. the advanced `Link',`UnLink', `Movem' optimizing `DASM' supports you
  5939. have to use the options -O,-OG,-ODh,-ODi,-ODj.  The option -OG is
  5940. needed because the link stackframe register list symbols are defined
  5941. after the commands so the assembler doesn't know them in the 1 pass
  5942. mode.  Sorry...i had to disable this mode because i later detected that
  5943. i have to keep track of the used registers.  I'll try to fix this in a
  5944. later version
  5945.  
  5946. Literature
  5947. **********
  5948.  
  5949.    * [Addison Wesley] RKM Libraries 2.04,CATS
  5950.  
  5951.    * [Addison Wesley] RKM Devices 2.04,CATS
  5952.  
  5953.    * [Addison Wesley] RKM Autodocs\&Includes 2.04,CATS
  5954.  
  5955.    * [Addison Wesley] RKM Hardware 2.04,CATS
  5956.  
  5957.    * [Addison Wesley] RKM Styleguide,CATS
  5958.  
  5959.    * [Addison Wesley] RKM Libraries 1.1,CATS
  5960.  
  5961.    * [Addison Wesley] RKM Intuition 1.1,CATS
  5962.  
  5963.    * [Addison Wesley] RKM Exec 1.1,CATS
  5964.  
  5965.    * [Addison Wesley] RKM Hardware 1.1,CATS
  5966.  
  5967.    * [Edotronik] Kommentiertes Rom-Listing 1,Dr. Ruprecht
  5968.  
  5969.    * [Edotronik] Kommentiertes Rom-Listing 2,Dr. Ruprecht
  5970.  
  5971.    * [Edotronik] Kommentiertes Rom-Listing 3,Dr. Ruprecht
  5972.  
  5973.    * [Ralph Babel] Guru Book,Selbstvertrieb
  5974.  
  5975. Software
  5976. ********
  5977.  
  5978.    For the development of Barfly the following programs were used:
  5979.  
  5980.    * [CATS] Developer CD V2.0
  5981.  
  5982.    * [B.Hawes] WShell V2.0
  5983.  
  5984.    * [M.Sinz] Enforcer
  5985.  
  5986.    * [C.Scheppner] Mungwall
  5987.  
  5988.    * [SAS Institute] SAS/C
  5989.  
  5990.    * [GNU] GCC
  5991.  
  5992.    * [ASDG] CED
  5993.  
  5994.    * [Georg Hessmann] PasTex
  5995.  
  5996.    * [Stefan Stuntz] MFR 2.0d
  5997.  
  5998.    * [Mathias Scheler] Filer
  5999.  
  6000.    * [Matthew Dillon] DNet
  6001.  
  6002. Assembler Addressmodes
  6003. **********************
  6004.  
  6005.      +--------------+------------------------+
  6006.      |   Notation   | Description            |
  6007.      +--------------+------------------------+
  6008.      +--------------+------------------------+
  6009.      |      EA      | Effective Address      |
  6010.      |      Dn      | D0...D7                |
  6011.      |      An      | A0...A7                |
  6012.      |      Xn      | D0...D7, A0...A7       |
  6013.      |      .b      | Operand Width  8Bit    |
  6014.      |      .w      | Operand Width 16Bit    |
  6015.      |      .l      | Operand Width 32Bit    |
  6016.      |     size     | w,l                    |
  6017.      |     Size     | b,w,l                  |
  6018.      |     Scale    | 1,2,4 or 8             |
  6019.      | Xn.size*Scale| 68000-10 only Scale 1. |
  6020.      +---------------------------------------+
  6021.  
  6022. `Data register direct'
  6023.      Syntax: Dn
  6024.  
  6025. `Address register direct'
  6026.      Syntax: An
  6027.  
  6028. `Address register indirect'
  6029.      Syntax: (An)
  6030.  
  6031. `Address register indirect with postincrement'
  6032.      Syntax: (An)+
  6033.  
  6034. `Address register indirect with predecrement'
  6035.      Syntax: -(An)
  6036.  
  6037. `Address register indirect with offset'
  6038.      Syntax: bd.w(An)
  6039.  
  6040. `Address register indirekt with index and offset'
  6041.      Syntax: bd.b(An,Xn{.Size*Scale})
  6042.  
  6043. `Address register indirect with index and offset'
  6044.      Syntax: (bd,An,Xn{.Size*Scale})
  6045.  
  6046. `Address register indirect with index and offset'
  6047.      Syntax: (bd.b,An,Xn{.Size*Scale})
  6048.  
  6049. `Address register indirect with index and base displacement'
  6050.      Syntax: ({bd.size{,An{,Xn{.Size{*Scale}}}}})
  6051.  
  6052. `Indirekter Memory Addressierung mit postindex'
  6053.      Syntax: ({[{bd.size{,An}}]}{Xn{.Size{*Scale}{,od.size}}})
  6054.  
  6055. `Indirekter Memory Addressierung mit preindex'
  6056.      Syntax: ({[{bd.size{,An}}{,Xn{.Size{*Scale}]}{,od.size}}})
  6057.  
  6058. `PC Indirect'
  6059.      Syntax: (PC)
  6060.  
  6061. `PC Indirect with offset'
  6062.      Syntax: bd.w(PC)
  6063.  
  6064. `PC Indirect with index and offset'
  6065.      Syntax: bd.b(PC,Xn{.Size*Scale})
  6066.  
  6067. `PC Indirect with index and offset'
  6068.      Syntax: bd.b(ZPC,Xn{.Size*Scale})
  6069.  
  6070. `PC Indirect with index and base displacement'
  6071.      Syntax: ({bd.size{,PC{,Xn{.Size{*Scale}}}}})
  6072.  
  6073. `PC Indirect with index and base displacement'
  6074.      Syntax: ({bd.size{,ZPC{,Xn{.Size{*Scale}}}}})
  6075.  
  6076. `PC Indirect memory Addressing with post-index'
  6077.      Syntax: ({[{bd.size{,PC}}]}{,Xn{.Size{*Scale}{,od.size}}})
  6078.  
  6079. `PC Indirect memory Addressing with post-index'
  6080.      Syntax: ({[{bd.size{,ZPC}}]}{,Xn{.Size{*Scale}{,od.size}}})
  6081.  
  6082. `PC Indirect memory Addressing with pre-index'
  6083.      Syntax: ({[{bd.size{,PC}}{,Xn{.Size{*Scale}]}{,od.size}}})
  6084.  
  6085. `PC Indirect memory addressing with pre-index'
  6086.      Syntax: ({[{bd.size{,ZPC}}{,Xn{.Size{*Scale}]}{,od.size}}})
  6087.  
  6088. `Absolut short'
  6089.      Syntax: bd.w
  6090.  
  6091. `Absolut long'
  6092.      Syntax: bd[.l]
  6093.  
  6094. `Immediate Data'
  6095.      Syntax: #xxx
  6096.  
  6097. Addressmode Examples
  6098. ====================
  6099.  
  6100.    To avoid some problems here are some small examples how addressmode
  6101. have to build up.
  6102.  
  6103.  
  6104.      x=$40
  6105.      y=$400
  6106.        move.b (x,A0,D2.W),D0
  6107.        move.b x(A0,D2.W),D0
  6108.      
  6109.      ;Both lines are correct
  6110.      ;(x,a0,d2.w) is optimized internal to (x,a0,d2.w).
  6111.      ;For more information please check the chapter about
  6112.      ;Optimizing Direct Addressmodes.
  6113.      
  6114.        move.b (y,A0,D2.W),D0
  6115.        move.b y(A0,D2.W),D0
  6116.      
  6117.      ;Now you get 2 errors, because y is not an 8bit word.
  6118.      ;These 2 lines shows the correct version.
  6119.      
  6120.        move.b (y.w,A0,D2.W),D0
  6121.        move.b (y.w,A0,D2.W),D0
  6122.      
  6123.      ;or
  6124.      
  6125.        move.b (y.l,A0,D2.W),D0
  6126.        move.b (y.l,A0,D2.W),D0
  6127.  
  6128. 680xx Opcode Overview
  6129. *********************
  6130.  
  6131.      +----------+---------+-------------------------------------------+
  6132.      |  Opcode  |  Size   | 68000 68010 68020 68030 68040 68060 6888x |
  6133.      +----------+---------+-------------------------------------------+
  6134.      +----------+---------+-------------------------------------------+
  6135.      | abcd     | b       |   x     x     x     x     x     x         |
  6136.      | add      | b,w,l   |   x     x     x     x     x     x         |
  6137.      | addq     | b,w,l   |   x     x     x     x     x     x         |
  6138.      | adda     | w,l     |   x     x     x     x     x     x         |
  6139.      | addi     | b,w,l   |   x     x     x     x     x     x         |
  6140.      | addx     | b,w,l   |   x     x     x     x     x     x         |
  6141.      | and      | b,w,l   |   x     x     x     x     x     x         |
  6142.      | andi     | b,w,l   |   x     x     x     x     x     x         |
  6143.      | asr      | b,w,l   |   x     x     x     x     x     x         |
  6144.      | asl      | b,w,l   |   x     x     x     x     x     x         |
  6145.      | bcc      | b,w,l   |   x     x     x     x     x     x         |
  6146.      | bchg     | b,l     |   x     x     x     x     x     x         |
  6147.      | bclr     | b,l     |   x     x     x     x     x     x         |
  6148.      | bfchg    | unsized |               x     x     x     x         |
  6149.      | bfclr    | unsized |               x     x     x     x         |
  6150.      | bfext    | unsized |               x     x     x     x         |
  6151.      | bfffo    | unsized |               x     x     x     x         |
  6152.      | bfins    | unsized |               x     x     x     x         |
  6153.      | bfset    | unsized |               x     x     x     x         |
  6154.      | bftst    | unsized |               x     x     x     x         |
  6155.      | bkpt     | unsized |         x     x     x     x     x         |
  6156.      | bset     | b,l     |   x     x     x     x     x     x         |
  6157.      | btst     | b,l     |   x     x     x     x     x     x         |
  6158.      | callm    | unsized |               x                           |
  6159.      | cas      | b,w,l   |   x     x     x     x     x     x,2       |
  6160.      | cas2     | b,w,l   |   x     x     x     x     x     x,2       |
  6161.      | chk      | b,w,l   |   x     x     x     x     x     x         |
  6162.      | chk2     | b,w,l   |               x     x     x     2         |
  6163.      | cinv¹    | unsized |                           x     x         |
  6164.      | clr      | b,w,l   |   x     x     x     x     x     x         |
  6165.      | cmp      | b,w,l   |   x     x     x     x     x     x         |
  6166.      | cmpa     | w,l     |   x     x     x     x     x     x         |
  6167.      | cmpi     | b,w,l   |   x     x     x     x     x     x         |
  6168.      | cmpm     | b,w,l   |   x     x     x     x     x     x         |
  6169.      | cmp2     | b,w,l   |               x     x     x     2         |
  6170.      | cpush¹   | unsized |                           x     x         |
  6171.      | dbcc     | w       |   x     x     x     x     x     x         |
  6172.      | divs     | w,l     |   x     x     x     x     x     x,2       |
  6173.      | divsl    | l       |               x     x     x     x         |
  6174.      | divu     | w,l     |   x     x     x     x     x     x,2       |
  6175.      | divul    | l       |               x     x     x     x         |
  6176.      | eor      | b,w,l   |   x     x     x     x     x     x         |
  6177.      | eori     | b,w,l   |   x     x     x     x     x     x         |
  6178.      | eori/ccr | b       |   x     x     x     x     x     x         |
  6179.      | eori/sr¹ | w       |   x     x     x     x     x     x         |
  6180.      | exg      | l       |   x     x     x     x     x     x         |
  6181.      | ext      | w,l     |   x     x     x     x     x     x         |
  6182.      | extb     | l       |               x     x     x     x         |
  6183.      | fabs     |         |                           x     x     x   |
  6184.      | fsabs    |         |                           x     x         |
  6185.      | fdabs    |         |                           x     x         |
  6186.      | facos    |         |                           2     2     x   |
  6187.      | fadd     |         |                           x     x     x   |
  6188.      | fsadd    |         |                           x     x         |
  6189.      | fdadd    |         |                           x     x         |
  6190.      | fasin    |         |                           2     2     x   |
  6191.      | fatan    |         |                           2     2     x   |
  6192.      | fatanh   |         |                           2     2     x   |
  6193.      | fbcc     |         |                           x     x     x   |
  6194.      | fcmp     |         |                           x     x     x   |
  6195.      | fcos     |         |                           2     2     x   |
  6196.      | fcosh    |         |                           2     2     x   |
  6197.      | fdbcc    |         |                           x     2     x   |
  6198.      | fdiv     |         |                           x     x     x   |
  6199.      | fsdiv    |         |                           x     x         |
  6200.      | fddiv    |         |                           x     x         |
  6201.      | fetox    |         |                           2     2     x   |
  6202.      | fetoxm1  |         |                           2     2     x   |
  6203.      | fgetexp  |         |                           2     2     x   |
  6204.      | fgetman  |         |                           2     2     x   |
  6205.      | fint     |         |                           2     x     x   |
  6206.      | fintrz   |         |                           2     x     x   |
  6207.      | flogn    |         |                           2     2     x   |
  6208.      | flognp1  |         |                           2     2     x   |
  6209.      | flog2    |         |                           2     2     x   |
  6210.      | flog10   |         |                           2     2     x   |
  6211.      | fmod     |         |                           2     2     x   |
  6212.      | fmove    |         |                           x     x     x   |
  6213.      | fsmove   |         |                           x     x         |
  6214.      | fdmove   |         |                           x     x         |
  6215.      | fmovecr  |         |                           2     2     x   |
  6216.      | fmovem   |         |                           x     x,2   x   |
  6217.      | fmul     |         |                           x     x     x   |
  6218.      | fsmul    |         |                           x     x         |
  6219.      | fdmul    |         |                           x     x         |
  6220.      | fneg     |         |                           x     x     x   |
  6221.      | fsneg    |         |                           x     x         |
  6222.      | fdneg    |         |                           x     x         |
  6223.      | fnop     |         |                           x     x     x   |
  6224.      | frem     |         |                           2     2     x   |
  6225.      | frestore¹|         |                           x     x     x   |
  6226.      | fscc     |         |                           2     2     x   |
  6227.      | fsub     |         |                           x     x     x   |
  6228.      | fssub    |         |                           x     x         |
  6229.      | fdsub    |         |                           x     x         |
  6230.      | fsave¹   |         |                           x     x     x   |
  6231.      | fscale   |         |                           2     2     x   |
  6232.      | fsglmul  |         |                           2     2     x   |
  6233.      | fsgldiv  |         |                           2     2     x   |
  6234.      | fsin     |         |                           2     2     x   |
  6235.      | fsinh    |         |                           2     2     x   |
  6236.      | fsincos  |         |                           2     2     x   |
  6237.      | fsqrt    |         |                           x     x     x   |
  6238.      | fssqrt   |         |                           x     x         |
  6239.      | fdsqrt   |         |                           x     x         |
  6240.      | ftan     |         |                           2     2     x   |
  6241.      | ftanh    |         |                           2     2     x   |
  6242.      | ftentox  |         |                           2     2     x   |
  6243.      | ftrap    |         |                           x     2     x   |
  6244.      | ftst     |         |                           x     x     x   |
  6245.      | ftwotox  |         |                           2     2     x   |
  6246.      | illegal  | unsized |   x     x     x     x     x     x         |
  6247.      | jmp      | unsized |   x     x     x     x     x     x         |
  6248.      | jsr      | unsized |   x     x     x     x     x     x         |
  6249.      | lea      | l       |   x     x     x     x     x     x         |
  6250.      | link     | w,l     |   x     x     x     x     x     x         |
  6251.      | lpstop   |         |                                 x         |
  6252.      | lsl      | b,w,l   |   x     x     x     x     x     x         |
  6253.      | lsr      | b,w,l   |   x     x     x     x     x     x         |
  6254.      | move     | b,w,l   |   x     x     x     x     x     x         |
  6255.      | movea    | w,l     |   x     x     x     x     x     x         |
  6256.      | moveq    | l       |   x     x     x     x     x     x         |
  6257.      | movec¹   | l       |         x     x     x     x     x         |
  6258.      | movem    | w,l     |   x     x     x     x     x     x         |
  6259.      | movep    | w,l     |   x     x     x     x     x               |
  6260.      | moves¹   | b,w,l   |         x     x     x     x     x         |
  6261.      | move16   |         |                           x     x         |
  6262.      | muls     | w,l     |   x     x     x     x     x     x         |
  6263.      | mulu     | w,l     |   x     x     x     x     x     x         |
  6264.      | nbcd     | b       |   x     x     x     x     x     x         |
  6265.      | neg      | b,w,l   |   x     x     x     x     x     x         |
  6266.      | negx     | b,w,l   |   x     x     x     x     x     x         |
  6267.      | nop      | unsized |   x     x     x     x     x     x         |
  6268.      | not      | b,w,l   |   x     x     x     x     x     x         |
  6269.      | or       | b,w,l   |   x     x     x     x     x     x         |
  6270.      | ori      | b,w,l   |   x     x     x     x     x     x         |
  6271.      | pack     | unsized |               x     x     x     x         |
  6272.      | pea      | l       |   x     x     x     x     x     x         |
  6273.      | pflush¹  | unsized |                     x     x     x         |
  6274.      | pflusha¹ | unsized |                     x                     |
  6275.      | plpa¹    | unsized |                                 x         |
  6276.      | pload¹   | unsized |                     x                     |
  6277.      | pmove¹   | w,l,q   |                     x                     |
  6278.      | ptest¹   | unsized |                     x     x               |
  6279.      | reset¹   | unsized |   x     x     x     x     x     x         |
  6280.      | rol      | b,w,l   |   x     x     x     x     x     x         |
  6281.      | ror      | b,w,l   |   x     x     x     x     x     x         |
  6282.      | roxl     | b,w,l   |   x     x     x     x     x     x         |
  6283.      | roxr     | b,w,l   |   x     x     x     x     x     x         |
  6284.      | rtd      | unsized |         x     x     x     x     x         |
  6285.      | rte¹     | unsized |   x     x     x     x     x     x         |
  6286.      | rtr      | unsized |   x     x     x     x     x     x         |
  6287.      | rts      | unsized |   x     x     x     x     x     x         |
  6288.      | rtm      | unsized |               x                           |
  6289.      | sbcd     | b       |   x     x     x     x     x     x         |
  6290.      | scc      | b       |   x     x     x     x     x     x         |
  6291.      | stop¹    | unsized |   x     x     x     x     x     x         |
  6292.      | sub      | b,w,l   |   x     x     x     x     x     x         |
  6293.      | subq     | b,w,l   |   x     x     x     x     x     x         |
  6294.      | suba     | w,l     |   x     x     x     x     x     x         |
  6295.      | subi     | b,w,l   |   x     x     x     x     x     x         |
  6296.      | subx     | b,w,l   |   x     x     x     x     x     x         |
  6297.      | swap     | w       |   x     x     x     x     x     x         |
  6298.      | tas      | b       |   x     x     x     x     x     x         |
  6299.      | trap     | unsized |   x     x     x     x     x     x         |
  6300.      | trapcc   | ? ,w,l  |               x     x     x     x         |
  6301.      | trapv    | unsized |   x     x     x     x     x     x         |
  6302.      | tst      | b,w,l   |   x     x     x     x     x     x         |
  6303.      | unlk     | unsized |   x     x     x     x     x     x         |
  6304.      | unpk     | unsized |               x     x     x     x         |
  6305.      +----------+---------+-------------------------------------------+
  6306.      
  6307.      ¹ Supervisor instruction
  6308.      2 These are software-supported instructions on the 68040 and 68060
  6309.  
  6310.